代码随想录Day3打卡 链表(1)

37 阅读1分钟

203 移除链表元素

在这道题中,我们可以用虚拟头节点来使head节点和之后的节点都一样,即删除后可以用dummy作为头节点。最后返回dummy.next即可。

var removeElements = function(head, val) {
    const dummy = new ListNode(-1)
    dummy.next = head
    let prev = dummy, curr = head
    while (curr !== null) {
        if (curr.val === val) {
            // 注意在删除时,不要动prev,
            // 因为如果我们还需要删除curr.next的话,
            // 要把prev接到前面
            prev.next = curr.next
            curr = prev.next
        } else {
            prev = prev.next
            curr = curr.next
        }
    }
    return dummy.next
};

206 反转链表

var reverseList = function(head) {
    let pre = null, curr = head
    while (curr !== null) {
        const tmp = curr.next
        curr.next = pre
        pre = curr
        curr = tmp
    }
    // end at curr === null, 
    // at the same time, pre is the previous curr
    return pre
};