茄子算法每日N题之LeetCode207移除链表元素

LeetCode 207.移除链表元素

你们好,我是灵魂画师--茄子。技术水平通常,喜欢画画。spa

开始今天的正题。code

删除链表中等于给定值 val 的全部节点。blog

示例:递归

输入: 1->2->6->3->4->5->6, val = 6rem

输出: 1->2->3->4->5it

题解:io

1.递归解法function

思路:class

  1. 递归终止条件,当前项为null;
  2. 让当前节点的next指向下一个节点;(递归这里)
  3. 若是当前节点的val值与val值相同那么就返回,当前节点的下一个节点,若是不是就返回当前节点。

图解

let removeElements = function (head, val) {
    if (head == null) {
        return head
    }
    head.next = removeElements(head.next, val);
    return head.val === val ? head.next : head;
};

2.哨兵解法List

思路:

  1. 设置一个伪头,让pre指向伪头,cur指向head。
  2. 前进pre跟cur。
  3. 若是cur的val与val相同那么让pre.next指向cur.next,若是不一样则前进节点便可。

图解

let removeElements = function (head, val) {
    let dummyHead = new ListNode(); // 设置哨兵节点
    dummyHead.next = head;
    let pre = dummyHead; // 设置pre
    let cur = head; // 设置cur

    while (cur != null) { // 判断cur是否为null
        if (cur.val !== val) { // 值不相同的话,前进pre跟cur
            pre = cur;
            cur = cur.next;
        } else { // 相同,pre.next指向cur.next 3->null
            pre.next = cur.next;
            cur = pre.next;
        }
    }

    return dummyHead.next;
};

以上就是个人思路以及解法了,但愿你们喜欢我画的图解,我会继续努力的ヾ(◍°∇°◍)ノ゙。(点个赞把我带走吧~~)

相关文章
相关标签/搜索