难度:简单
https://leetcode-cn.com/problems/remove-linked-list-elements/
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足
Node.val == val
的节点,并返回 新的头节点 。
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
输入:head = [], val = 1
输出:[]
输入:head = [7,7,7,7], val = 7
输出:[]
/**
* 递归
* @desc 时间复杂度 O(N) 空间复杂度 O(N)
* @param head
* @param val
* @returns
*/
export function removeElements(
head: ListNode | null,
val: number
): ListNode | null {
if (head === null) return head;
head.next = removeElements(head.next, val);
return head.val === val ? head.next : head;
}
/**
* 迭代
* @desc 时间复杂度 O(N) 空间复杂度 O(1)
* @param head
* @param val
* @returns
*/
export function removeElements2(
head: ListNode | null,
val: number
): ListNode | null {
const dummyHead = new ListNode(0, head);
let temp = dummyHead;
while (temp.next !== null) {
if (temp.next.val == val) {
temp.next = temp.next.next;
} else {
temp = temp.next;
}
}
return dummyHead.next;
}