移除链表元素
1. 题目描述
提示
题目链接:https://leetcode.cn/problems/remove-linked-list-elements/description/
2. 解题思路
核心总结
- 核心思想:直接删除或使用虚拟头节点。虚拟头节点可以将“删除头节点”和“删除中间节点”的逻辑统一处理。
💡 易错点
在迭代 cur.next.val == val 之前,必须先检查 cur.next != null,否则会报空指针异常(NPE)。
3. 代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode cur = head;
while(cur!=null){
if(cur.val == val){
head = cur.next;
cur = head;
}else if(cur.next != null && cur.next.val == val){
cur.next = cur.next.next;
}else{
cur = cur.next;
}
}
return head;
}
}
|
4. 复杂度分析
- 时间复杂度:$O(n)$
- 空间复杂度:$O(1)$
5. 总结与反思