练习路径参考:代码随想录
Leetcode相关题目:
移除链表元素
设计链表
反转链表
两两交换链表中的节点
删除链表的倒数第 N 个结点
链表相交
环形链表Ⅱ
知识点总结
1 虚拟头节点
对于单链表的处理(插入、删除操作),头节点和中间节点的处理逻辑不同;
具体的题目中:
要么使用单独的逻辑处理头节点;
要么构造一个虚拟头节点一起处理;
2 链表操作
对于链表交换顺序的类型,通常需要几个辅助指针完成;
设置辅助指针的核心是以当前要处理的节点为中心,每一轮处理都保证处理逻辑不变;
3 链表元素定位
元素定位一般使用多个指针,便于指示相对位置信息;(参考:[删除链表的倒数第 N 个结点])
4 算法技巧
【链表相交】
1 若链表相交,末尾元素一定相同;
2 相同长度下,分别遍历,第一次两指针相同时,即为首次相交的节点;
3 不同长度下,通过记录两个链表的长度,让长链表指针走到与短链表相同长度位置时,转为2情况;
【环形链表】
使用快慢指针(初始时两指针均指向头节点),两个指针相交,说明有环;
此时:
- 快慢指针交于环内;
- 慢指针在环内未走慢一圈;
- 快指针走过的路径是慢指针走过的路径的两倍
数学推理可知,环内离成环节点剩余路径与环外路径相同,即可找到第一个入环节点。