清风的技术小屋

不为所动, 做更专业的自己

0%

LeetCode 203 - Remove Linked List Elements

问题描述

Remove all elements from a linked list of integers that have value val.

Example:

1
2
Input:  1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5

Related Topics: Linked List

原问题: 203. Remove Linked List Elements

中文翻译版: 203. 移除链表元素

解决方案

链表删除基本操作的实现,使用三个指针 prevcurr 以及 nextprev 指向 curr 前一个节点,curr 指向要删除的节点,next 指向 curr 下一个节点。curr 从头节点开始遍历,按照链表删除元素操作依次删除值为 val 的节点即可

1
2
3
4
next = curr->next;
prev->next = next;
delete curr;
curr = next;

这里要注意的是头节点,如果头节点的值刚好 val,这个删除操作和上面的代码片段有少许区别

参考解题代码
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
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode *prev, *curr, *next;

prev = NULL;
curr = head;
while (curr != NULL) {
if (curr->val == val) {
next = curr->next;
if (prev == NULL)
head = next;
else
prev->next = next;
delete curr;
curr = next;
} else {
prev = curr;
curr = curr->next;
}
}

return head;
}
};