Leetcode:203.移除链表元素

165 阅读1分钟

力扣题目链接

题目

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

示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 示例 2:

输入:head = [], val = 1 输出:[] 示例 3:

输入:head = [7,7,7,7], val = 7 输出:[]  

提示:

列表中的节点数目在范围 [0, 10^4] 内

1 <= Node.val <= 50

0 <= val <= 50

思路

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
  • 给了我们ListNode函数了,并且函数里有next属性,所以我们要使用上
  • 删除元素就是将元素节点的next指向要删除的元素节点的下一个节点
  • 因为题目没有给我们提供前一个元素的指向,所以我们就利用节点的next属性,也就是我们删除的目标元素节点是cur.next而不是cur(若是要删除cur,我们需要知道指向它的前一个节点)。删除cur.next就是将cur.next.next赋值给cur.next

92B56406FC4EC32594441D9D4ADB2212.png

var removeElements = function(head, val) {
    const ret = new ListNode(0,head)
    let cur = ret
    while (cur.next){
        if (cur.next.val === val){
            cur.next = cur.next.next
            continue
        }
        cur = cur.next
    }
    return ret.next
};