链表

反转链表

简单#206Java时间 O(n)空间 O(1)

题目要做什么

反转单链表,返回反转后的头节点。节点值不变,修改的是 next 指针。

题目示例输入head = [1,2,3,4,5]
题目示例输出[5,4,3,2,1]

01 为什么这样做

保存当前节点的后继,再让当前节点指向已经反转的前缀。prev 和 current 逐步前进,直到原链表处理完毕。

始终成立的条件

prev 是已反转前缀的头,current 是尚未处理后缀的头。

02 看见算法执行

动画与代码同步

修改输入,播放自己的例子

当前使用题目示例
修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出播放到最后查看

Solution.java参考解法
1class Solution {2    public ListNode reverseList(ListNode head) {3        ListNode prev = null, current = head;4        while (current != null) {5            ListNode next = current.next;6            current.next = prev;7            prev = current;8            current = next;9        }10        return prev;11    }12}

键盘控制:A 后退 · D 前进

编程练习

↑↓ 选择↵ 打开Pagefind 全文检索