203. 移除链表元素
js
;(function () {
/**
* 203. 移除链表元素
* 给你一个链表的头节点 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
* 输出:[]
*
*/
/**
* Definition for singly-linked list.
*/
class ListNode {
val: number
next: ListNode | null
constructor(val?: number, next?: ListNode | null) {
this.val = val === undefined ? 0 : val
this.next = next === undefined ? null : next
}
}
function removeElements(head: ListNode | null, val: number): ListNode | null {
// 方法一: 迭代(官方)
// const dummyHead = new ListNode(0)
// dummyHead.next = 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
// 方法二: 递归(官方)
// if (head === null) {
// return head;
// }
// head.next = removeElements(head.next, val);
// return head.val === val ? head.next : head;
// 方法三: DIY - 类似官方迭代
const dummyHead = new ListNode(0)
dummyHead.next = head
let temp = dummyHead
while (head !== null) {
if (head.val === val) {
temp.next = head.next
} else {
temp = head
}
head = head?.next
}
return dummyHead.next
}
})()