js_algorithm icon indicating copy to clipboard operation
js_algorithm copied to clipboard

反转链表

Open Cosen95 opened this issue 4 years ago • 1 comments

leetcode: https://leetcode-cn.com/problems/reverse-linked-list/

Cosen95 avatar May 09 '20 03:05 Cosen95

题目分析

我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的,第二个指针 cur 指向 head,然后不断遍历 cur

每次迭代到 cur,都将 curnext 指向 pre,然后 precur 前进一位。 都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。

边界条件: 当链表为 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 || !head.next) return head
    let cur = head, pre = null;
    while(cur) {
        const next = cur.next;
        cur.next = pre;
        pre = cur
        cur = next;
    }
    return pre
};

Cosen95 avatar May 09 '20 03:05 Cosen95