1

LeetCode 207.移除链表元素

大家好,我是灵魂画师--茄子。技术水平一般,喜欢画画。

开始今天的正题。

删除链表中等于给定值 val 的所有节点。

示例:

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

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

题解:

1.递归解法

思路:

  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.哨兵解法

思路:

  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;
};

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


灵魂画师_茄子
11 声望4 粉丝