代码随想录一刷day6 (链表day2)(链表完结)

24. 两两交换链表中的节点

分三步走;

1.创建dummyhead

2.三个指针  cur   t1  t2

3.   cur->next=t2;    t1->next=t2->next;    t2->t1->next;  最后让cur=t1;

注意最后返回的是dummyhead-》next  而不是head;注意最后delete dummyhead

19.删除链表的倒数第N个节点

注意分析题意即可  

面试题 02.07. 链表相交

思路:目标:找到cur指针指向同一个地址的结点

分析:如果相交,相交之后的链表是一样的;所以选择遍历链表长度,找出小的,然后得出两个的差值p;

对长的,移动到p位置,然后cur_A,cur_B同时向后移动,如果遇到相等的,则返回cur,没有就返回nullptr;

142.环形链表II

思路:

分析:解1:直接用哈希表,遇到一个记录一个

解2:快慢指针,快的一次走2步,慢的一次一步

如果有环,则快慢指针会相遇

如果没换环,返回nullptr

有环的情况:入环位置推导:  

当快慢指针第一次相遇的时候设置一个慢指针从头跑,快指针咱不管他,之前的慢指针继续走。当第二个慢指针走到之前慢指针和快指针相遇的地方的时候,你会发现那个没停的慢指针是不是应该走了快指针的距离,那是不是两个慢指针应该在之前快慢指针相遇的地方又相遇了。如果想让两个速度一样的指针在环里相遇,那只有在他们入环的时候相遇才能在一起。所以由此可以推论出两个慢指针第一次相遇的时候就是入环的节点。

解1:

解2:

 

posted @ 2024-11-02 15:24  Fredddy  阅读(4)  评论(0编辑  收藏  举报