LeetCode刷题笔记-数据结构-day10
Posted ΘLLΘ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题笔记-数据结构-day10相关的知识,希望对你有一定的参考价值。
文章目录
LeetCode刷题笔记-数据结构-day10
2.两数相加
1.题目描述
原题链接:2. 两数相加
2.解题思路
直接模拟即可:
- 从最低位至最高位,逐位相加,如果和大于等于10,则保留个位数字,同时向前一位进1,这里用
t
表示相加的和 - 最后需要特判,如果最高位有进位,则需要补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 待在原地不动,然后两个指针每次分别走一步,当相遇时,相遇点就是环的入口。
意思大概就是:
- 假如c点是刚好判断出存在环的点
- 由于first走的路程为second的一半
- 因此a到c的距离x+y为first第一次走的距离
- 因此可以得出c沿顺时针到c的距离就是second多走的一倍距离,也是x+y
- 因此得出c沿顺时针到b的距离为x
- 最后让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的主要内容,如果未能解决你的问题,请参考以下文章