203. 移除链表元素
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
// 使用一个哑节点(dummy node)来简化边界情况的处理
ListNode* dummy = new ListNode(-1);
dummy->next = head;
ListNode* prev = dummy; // 使用 prev 指针来遍历链表,始终指向当前节点的前一个节点
while(prev->next != nullptr) {
if (prev->next->val == val) {
ListNode* toDelete = prev->next; // 需要删除的节点
prev->next = toDelete->next; // 从链表中移除节点
delete toDelete; // 释放节点内存
} else {
prev = prev->next; // 只有当不删除节点时才移动 prev 指针
}
}
head = dummy->next; // 更新头节点(考虑头节点可能被删除的情况)
delete dummy; // 删除哑节点并释放内存
return head;
}
};