题目 LeetCode24
使用虚拟头节点
图文解析 + 自己 debug
public ListNode reverseList(ListNode head) {
ListNode ans = new ListNode(-1);
ListNode cur = head;
while (cur != null) {
// 方便 cur 最后指向下一个节点
ListNode next = cur.next;
cur.next = ans.next;
ans.next = cur;
cur = next;
}
return ans.next;
}
不使用虚拟头节点
反转前后的图片解析
反转过程,结合图片仔细想想
public ListNode reverseList(ListNode head) {
// 不使用虚拟头节点
ListNode pre = null;
ListNode cur = head;
while (cur != null) {
ListNode next = cur.next;
// 看上图发现一点,就是 cur 的左边就是 pre 所以总结 cur.next = pre 即可
cur.next = pre;
// pre 向前移动一个位置
pre = cur;
// cur 变到新的位置
cur = next;
}
// 最后 pre 已经变成了新链表的头节点
return pre;
}