Reverse Linked List
反转一个单链表。
LeetCode连接:https://leetcodechina.com/problems/reverse-linked-list/description/
使用递归的方式。
优势:
- 借用JS强大的闭包功能
- 只需遍历一遍链表
缺点:
递归的缺点:占空间
思路:
- 递归的基线条件:遍历到末节点(node.next === null)
- 递归的递归条件:node.next !== null
- 当遇到末节点时,返回末节点,前一节点接收末节点,并把末节点的next设置为自身,返回前一节的,继续下去
- 考虑特殊情况:undefined和null
直接贴代码:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function (head) {
// 闭包
if (head === undefined || head === null) return null
var originalHead = head
var reverseHead
var reverse = function (head) {
if (head.next === null) {
reverseHead = head
return head
} else {
var node = reverse(head.next)
node.next = head
if (originalHead === head) {
head.next = null
return reverseHead
} else {
return head
}
}
}
return reverse(head)
};
运行时间如下,小于100ms: