LeetCode 206:反转链表
题目描述
给定单链表的头节点 head,要求反转原链表并返回反转后的头指针。进阶要求时间复杂度为 O(n),空间复杂度为 O(1)。


解题思路
方法一:原地反转指针
核心逻辑:遍历一遍链表,将当前结点的 next 指针指向其前驱节点。最终返回原链表的尾结点(即新链表的头结点)。
关键点:
- 需要保存三个指针:当前节点
curNode、前驱节点curPrev、后继节点curNext。 - 在修改
curNode->next之前,必须先记录curNode->next给curNext,否则链表会断开。 - 初始时
curPrev为nullptr,因为新链表的尾部指向空。
注意:在 while 循环内保存
curNext,能保证curNode不为空,避免对空指针解引用,代码更健壮。

方法二:头插法构建新链表
核心逻辑:创建一个新链表,头结点 newHead 初始为 nullptr。遍历原链表,将原链表中的节点依次'头插'到新链表中。
操作细节:
- 同样需要
curNext暂存后继节点,防止头插后丢失后续连接。 - 每次将
curNode->next指向当前的newHead,然后更新newHead = curNode。 - 最终返回
newHead。



