题目
代码实现
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode curr = head;
while (curr != null) {
ListNode next = curr.next;
curr.next = pre;
pre = curr;
curr = next;
}
return pre;
}
}
思路解析
- 通过示例观察,发现反转链表可以简化成将每一个节点反转。
- 反转单个节点步骤:
- 记录当前节点的下一个节点,防止当前节点
curr
的next
变更时获取不到下一个需要反转的节点。 - 反转后的
curr
节点的下一个节点是反转前的curr
节点的上一个节点pre
。 curr
反转成功后,更新pre
节点和curr
节点的值。
- 记录当前节点的下一个节点,防止当前节点