学习目标:
掌握复杂链表内容
学习内容:
提示:这里可以添加要学的内容
-
24. 两两交换链表中的节点
-
19.删除链表的倒数第N个节点
-
面试题 02.07. 链表相交
-
142.环形链表II
学习时间:
9.27 20:50-12:50
学习产出:
因为近期较忙,就直接观看视频作笔录然后写代码 最后根据代码随想录网站代码更改。
如果没有视频就分析题目后直接阅读网站内容写代码。
-
24. 两两交换链表中的节点
1.三个节点为一次循环//即cur->next and cur->next->next != nullptr
2.创建存储点
3.虚拟头节点指向cur->next->next(节点2变为头节点)
4.cur->next->next指向cur->next(节点1变为原节点2需要提前存储)
5.cur->next->next->next再指向cur-next->next->next(节点3还是节点3但是要重新用存储地址指一下)
6.重复以上步骤
最后向后移动两步,进入下一个循环。
19.删除链表的倒数第N个节点
代码随想录视频:
1.找到倒数第n个节点
2.同样使用虚拟头节点的方法
3.双指针的方法,快指针移动n步,快慢指针同时移动
直到快指针指向null
4.慢指针需要指向删除节点的前一个即快指针需要多走一步
即n+1步
5.找到节点删除
6.释放内存并返回
代码简单建议直接网站找
面试题 02.07. 链表相交
1.两个指针分别指向两个链表
2.截取相同长度的链表
3.当没有相同的时候,移动指针
4.当有地址相同时的时候返回
5.否则继续移动
比较地址而不是数值!!
142.环形链表II
1.如何判断链表如何有环
a.通过快慢指针判断
b.快指针进入环以每次1节点的速度接近慢指针
c.在环内快指针的速度比慢指针快就会不停接近慢指针
2.如何找到环的入口
a. 两个指针快指针的速度2慢指针速度为1
b.指针移动的距离为pos+在圈内移动的距离
即 (pos+ fast)/2 = (pos + slow)
即 pos + 2slow = fast
fast - slow = fast在圈内超过slow所走的距离
fast-2slow = fast在圈内超过slow所走的距离 - slow在圈内走的距离
因为fast追上slow的时候在圈内一定套圈了
即fast一定走过2slow的距离 即第一圈跟第二圈追上时走的slow的距离
fast-2slow = 圈内相遇点到pos的距离 = pos
详细解释可以看代码随想录视频
这是我自己理解的。。
3.代码实现
当两个指针相等的时候,即两个指针相遇的位置
head到pos的距离等于相遇位置到pos的距离
两个指针同时查找直到相遇