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
节点和一步步操作,能够避免出错并提高效率。
环的问题总结:https://blog.csdn.net/liuxialong/article/details/6555850
https://blog.csdn.net/liuxialong/article/details/6556096https://blog.csdn.net/linchonghui888/article/details/79896127
https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
Last updated