题目链接:
https://leetcode.cn/problems/reverse-linked-list/
方案一:
解题思路:
- 先借助一个额外的 List 来将各节点存储下来
- 反向遍历这个 List,然后构造最终结果
-
解题代码:
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null) {
return null;
}
ListNode previous= null;
ListNode current = head;
while (current != null) {
previous = new ListNode(current.val, previous);
current = current.next;
}
return previous;
}
}
运行结果:
复杂度分析:
时间复杂度:O(n)
- 空间复杂度:O(1)
引发的思考:
上诉的代码并不是一开始想到的,而是重构出来的;
最初的思路是先借助一个额外的 List 来将各节点存储下来,然后遍历 List 的过程中重新构造最终结果
通过上一步先实现功能,然后寻找共同点,将额外的 List 去掉后,将第 2 个遍历代码合并到 While 循环中即可