LeetCode-203.移除链表元素

题目详解

相关链接

思路

  1. 生成一个虚拟头节点dummyHead指向head
  2. 然后从dummyHead开始完整的遍历链表:判断当前节点的后一个节点val是否是否是目标值,如果是则将当前节点的next指向下下个节点(即跳过目标节点,从而达到删除效果)

看完代码随想录之后的想法

  • 与我想法一致

实现过程中遇到的困难

代码

TypeScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* 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 {
let dummyHead = new ListNode()
dummyHead.next = head
let cur = dummyHead
while (cur.next) {
if (cur.next.val === val) cur.next = cur.next.next
else cur = cur.next
}
return dummyHead.next
}

时间复杂度:O(n)
空间复杂度:O(1)

收获

  • 链表进行增删操作时通常可以使用虚拟头节点,就不需要单独处理头节点了,使得处理方法统一,代码更清爽。
-------- 本文结束 感谢阅读 --------
0%