206. [E] Reverse Linked List

https://leetcode.com/problems/reverse-linked-list/

这个题目之前去 Facebook 面试遇到过一个相关的题目,也是一个基本的链表技巧题目,很重要。可是时隔两个月,再次做的时候,虽然是个 Easy Level 的题目,可是思路还是会乱。所以重点记录一下。

要点是要有三个指针,分别是 p前一个节点,c当前节点,和n下一个节点。为了避免在翻转的过程中丢失链表链接,因此要用 n 来保存下一个节点。翻转完成之后,c 指向之前保存过的 n,重复这个过程。

public ListNode reverseList(ListNode head) {
ListNode p = null, c = head, n = null;
while (c != null) {
n = c.next; // 保存下一个节点
c.next = p; // 反转当前节点连接
p = c; // 陆续更新 p 和 n,次序很重要
c = n;
}
return p;
}