Reverse Linked List
反轉(zhuǎn)一個(gè)單鏈表。
LeetCode連接:https://leetcodechina.com/problems/reverse-linked-list/description/
使用遞歸的方式。
優(yōu)勢:
- 借用JS強(qiáng)大的閉包功能
- 只需遍歷一遍鏈表
缺點(diǎn):
遞歸的缺點(diǎn):占空間
思路:
- 遞歸的基線條件:遍歷到末節(jié)點(diǎn)(node.next === null)
- 遞歸的遞歸條件:node.next !== null
- 當(dāng)遇到末節(jié)點(diǎn)時(shí),返回末節(jié)點(diǎn),前一節(jié)點(diǎn)接收末節(jié)點(diǎn),并把末節(jié)點(diǎn)的next設(shè)置為自身,返回前一節(jié)的,繼續(xù)下去
- 考慮特殊情況: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)
};
運(yùn)行時(shí)間如下,小于100ms:

image.png