代码随想录一刷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: