反转链表

一、迭代

执行用时:96 ms, 在所有 JavaScript 提交中击败了33.93%的用户
内存消耗:39.7 MB, 在所有 JavaScript 提交中击败了50.02%的用户
var reverseList = function(head) {

    let prev= null,
        curr = head;
    while (curr) {
        let tmp = curr.next;    // 1. 临时存储当前指针后续内容
        curr.next = prev;       // 2. 反转链表
        prev = curr;            // 3. 接收反转结果
        curr = tmp;             // 4. 接回临时存储的后续内容
    }
    return prev;
};

 

二、尾递归

执行用时:84 ms, 在所有 JavaScript 提交中击败了84.25%的用户
内存消耗:39.4 MB, 在所有 JavaScript 提交中击败了93.21%的用户
var reverseList = function(head) {
    return reverse(null, head);
};

function reverse (prev, curr) {
    if (!curr) return prev;
    // [curr.next, prev, curr] = [prev, curr.next, curr.next];
    let tmp = curr.next;
    curr.next = prev;
    return reverse(curr, tmp);
}

 

posted @ 2021-04-01 16:29  Jiox  阅读(55)  评论(0)    收藏  举报