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

Posted ΘLLΘ

tags:

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

文章目录

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

2.两数相加

1.题目描述

原题链接:2. 两数相加

2.解题思路

直接模拟即可:

  1. 从最低位至最高位,逐位相加,如果和大于等于10,则保留个位数字,同时向前一位进1,这里用t表示相加的和
  2. 最后需要特判,如果最高位有进位,则需要补1

3.代码

class Solution 
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) 
        int t=0;
        ListNode* res=new ListNode(-1);
        auto head=res;
        while(l1||l2)
            if(l1!=nullptr)
                t+=l1->val;
                l1=l1->next;
            
            if(l2!=nullptr)
                t+=l2->val;
                l2=l2->next;
            
            res->next=new ListNode(t%10);
            t/=10;
            res=res->next;
        
        if(t) res->next=new ListNode(t);
        return head->next;
    
;

142.环形链表 II

1.题目描述

原题链接:142. 环形链表 II

2.解题思路

此部分参考题解:https://www.acwing.com/solution/content/241/

如图:

用两个指针 first,second 分别从起点开始走,first 每次走一步,second 每次走两步。如果过程中 second走到null,则说明不存在环。否则当 first 和 second 相遇后,让 first返回起点,second 待在原地不动,然后两个指针每次分别走一步,当相遇时,相遇点就是环的入口。

意思大概就是:

  1. 假如c点是刚好判断出存在环的点
  2. 由于first走的路程为second的一半
  3. 因此a到c的距离x+y为first第一次走的距离
  4. 因此可以得出c沿顺时针到c的距离就是second多走的一倍距离,也是x+y
  5. 因此得出c沿顺时针到b的距离为x
  6. 最后让first重新从a出发,second从c出发,一人一步,最后相交的地方就是b,也就是答案

3.代码

class Solution 
public:
    ListNode *detectCycle(ListNode *head) 
        if(!head) return NULL;
        auto t1=head,t2=head;
        while(t1&&t2)
            t1=t1->next;
            t2=t2->next;
            if(!t2) return NULL;
            else t2=t2->next;
            if(t1==t2)
                t1=head;
                while(t1!=t2)
                    t1=t1->next;
                    t2=t2->next;
                
                return t1;
            
        
        return NULL;
    
;

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

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

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

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

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

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

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