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]
内 1 <= Node.val <= 50
0 <= k <= 50
2. 解题思路
对于这道题目,本身是很简单的,就是遍历链表,删除指定的值,但是需要注意,如果是需要删除的值在链表中时,直接删除即可,如果要删除的节点在链表的头部,这就要处理遍历情况,为了避免这种情况,我们可以初始化一个哑结点dummyHead,它是一个空节点,将他放在头结点的前面。这样就不会出现为空的情况。
复杂度分析:
- 时间复杂度:O(n)。其中
n
为链表的长度,我们需要遍历整个链表。 -
3. 代码实现
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @param {number} val
* @return {ListNode}
*/
var removeElements = function(head, val) {
let dummyHead = new ListNode(0)
dummyHead.next = head
let pre = dummyHead, cur = head
while(cur){
cur.val == val ? pre.next = cur.next : pre = cur
cur = cur.next
}
return dummyHead.next
};
4. 提交结果