LeetCode刷题笔记-数据结构-day11

Posted ΘLLΘ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题笔记-数据结构-day11相关的知识,希望对你有一定的参考价值。

文章目录

LeetCode刷题笔记-数据结构-day11

160. 相交链表

1.题目描述

原题链接:160. 相交链表

2.解题思路

假设相交的情况,如图:

仔细观察可以看出:

  1. 我们只需要使用两个指针t1和t2分别从不同端扫描
  2. 如果到底了,两个指针交换扫描路线
  3. 可以得到,t1和t2扫描的最终距离都是a+b+c,最终在交汇点一定相遇

对于不相交的情况,使用上述方法最终也会返回null

3.代码

class Solution 
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) 
        auto t1=headA;
        auto t2=headB;
        while(t1!=t2)
            if(t1) t1=t1->next;
            else t1=headB;
            if(t2) t2=t2->next;
            else t2=headA;
         
        return t1;
    
;

82. 删除排序链表中的重复元素 II

1.题目描述

原题链接:82. 删除排序链表中的重复元素 II

2.解题思路

题目大意:只要连续的一段相同元素个数超过1,就把相同的这段全部删掉。

为了方便处理边界情况,我们定义一个虚拟元素 dummy 指向链表头节点。

具体实现看代码。

3.代码

class Solution 
public:
    ListNode* deleteDuplicates(ListNode* head) 
        ListNode* dummy=new ListNode(-1);
        dummy->next=head;
        auto p=dummy;
        while(p->next)
            ListNode* q=p->next;
            while(q->next&&p->next->val==q->next->val)
                q=q->next;
            
            //如果q==p->next,说明相同元素没有超过一个,正常遍历,p后移于一位
            if(q==p->next) p=p->next;
            //否则,直接将该段删除,p点不移动,继续扫描接下来的段
            else  p->next=q->next;
        
        return dummy->next;
    
;

以上是关于LeetCode刷题笔记-数据结构-day11的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题笔记-数据结构-day19

LeetCode刷题笔记-数据结构-day20

LeetCode刷题笔记-数据结构-day16

LeetCode刷题笔记-数据结构-day5

LeetCode刷题笔记-数据结构-day9

LeetCode刷题笔记-数据结构-day14