L6_链表(快慢指针)
链表知识点总结 - 简洁版
1. 链表反转 (Reverse)
核心思想: 改变节点指向方向。
方法一:迭代 (循环首位相接)
使用三个指针
prev
,curr
,next
。每次迭代将
curr.next
指向prev
,然后依次移动指针。
方法二:头插法
建立新的头节点。
将原链表的每个节点依次插入到新头节点的后面。
注意: 反转后,原链表的头节点成为尾节点,其
next
指针需要重新设置。
反转链表首尾呼应的代码:
2. 快慢指针 (Fast & Slow Pointers)
用途:
找到链表中间节点(或中偏后节点)。
检测链表是否有环。
解决链表相交问题。
原理:
快指针每次移动两步,慢指针每次移动一步。
3. 链表相交 (Intersection)
判断方法:
方法一:快慢指针 + 环检测
将一个链表的尾节点连接到另一个链表的头节点,形成一个环。
使用快慢指针判断是否有环。如果存在环,则说明两个链表相交。
方法二:尾节点比较
找到两个链表的尾节点,如果尾节点相同,则说明链表相交。
相交链表从相遇点开始有相同的尾节点。
4. 辅助技巧
Dummy 节点: 在链表头部添加一个 dummy 节点,方便处理边界情况。
一步步走: 避免使用
node.next.next
,先设置node.next
,再移动node
。
必做题:
Reverse Nodes in k-Group: 将链表每 k 个节点进行翻转。需要熟练掌握链表反转技巧,并注意处理边界情况。
总结:
链表操作的关键在于理解节点指向的变化。通过掌握反转、快慢指针、相交判断等技巧,可以解决大部分链表相关问题。记住使用 dummy
节点和一步步操作,能够避免出错并提高效率。
-------------------------------------------------2025-------------------------------------------------
链表指针操作防乱指南(反转/增删/K组处理)
一、通用防乱原则
虚拟头节点(Dummy Node) 在头节点可能变化的场景(如删除头节点、K组反转)必须使用:
三指针法则 涉及指针反转时,必须同时维护
pre
、cur
、nxt
三个指针:子链表切割法 处理局部操作时,先切割出独立子链表,操作完再重新连接:
二、高频场景操作模板
场景1:反转K个一组的链表
场景2:删除倒数第N个节点
场景3:在排序链表插入新节点
三、防错检查清单
指针移动前必保存后路 反转/删除时先保存
nxt = cur.next
连接顺序遵循「新→旧」原则 插入新节点时先
new.next = old
,再修改前驱指针边界条件验证 操作前后检查:
头尾节点是否特殊处理
空链表/单节点链表情况
K值大于链表长度时的处理
可视化画图法 面试时在白板画出指针变化示意图(示例见下图)
掌握这些模式可覆盖90%链表题型,建议结合LeetCode 25、92、19等题强化训练。
Last updated
Was this helpful?