[LeetCode] 206. Reverse Linked List
Given the head of a singly linked list, reverse the list, and return the reversed list.
Example 1:
Input: head = [1,2,3,4,5]
Output: [5,4,3,2,1]
Example 2:
Input: head = [1,2]
Output: [2,1]
Example 3:
Input: head = []
Output: []
Constraints:
The number of nodes in the list is the range [0, 5000].
-5000 <= Node.val <= 5000
Follow up: A linked list can be reversed either iteratively or recursively. Could you implement both?
反转链表。
这类reverse的题不会写,会写homebrew也枉然。
思路 - 迭代
首先是 iterative 的思路,创建一个空的指针 pre。当 head 不为空的时候,先存住 head.next,然后 head.next 指向 pre,最后 pre,head,next 三个指针整体往后移动一位。
也分享一个注释写的比较好的discussion和一个动图帮助理解。
复杂度
时间O(n)
空间O(1)
代码
Java实现
1 |
|
JavaScript实现
1 |
|
思路 - 递归
这道题还有递归的做法。递归的思想是把大的问题拆解成足够小的问题,小的问题解决了,大的问题也就能解决。
复杂度
时间O(n)
空间O(n) - 递归栈空间
代码
Java实现
1 |
|
相关题目
1 |
|
[LeetCode] 206. Reverse Linked List
https://shurui91.github.io/posts/2655630186.html