LeetCode-移除链表元素

LeetCode刷题笔记

LeetCode题库:https://leetcode-cn.com/problemset/all/

移除链表元素

给定链表表头head和一个整数val,删除链表中所有满足Node.val === val的结点,并返回新的头节点

给定链表

function ListNode(val, next) {
    this.val = (val === undefined ? 0 : val);
    this.next = (next === undefined ? null : next);
}

var list = function(arr) {
    var head = null;
    for (var i = arr.length - 1; i >= 0; i--) {
        head = new ListNode(arr[i], head);
    }
    return head;
};

const l = list([1,2,6,3,4,5,6]);

实现思路

遍历整个链表,并记录上一个结点,当发现满足条件的结点时:

  1. 判断此结点是否为头节点,如果是则将头节点指向第二个结点
  2. 其余结点的移除,通过lastnext指向当前结点的next的方式实现

代码实现

var removeElements = function(head, val) {
    var last = null; // 记录上一个结点
    var node = head;
    // 开始遍历链表
    while (node !== null) {
        // 发现满足条件的结点
        if (node.val === val) {
            if (last === null) {
                // 删除头结点
                var tmp = node;
                head = tmp.next;
                node = node.next;
                continue;
            } else {
                // 其余结点
                last.next = node.next;
                node = last;
                continue;
            }
        }
        last = node; // 记录此结点,即下一次遍历的上一个结点
        node = node.next;
    }
    return head;
};

运行结果

执行用时 内存消耗
104 ms 42.7 MB
posted @ 2021-06-05 15:40  陈嘉懿  阅读(28)  评论(0编辑  收藏  举报