单链表——移除元素
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
- 关键1 创建虚拟结点,统一删除方式
- 关键2 创建移动指针,不要操作虚拟结点或者头结点
- 关键3 记得释放删除节点的内存,以及虚拟结点的内存
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
//使用虚拟头结点的方式
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
//创建一个遍历指针
ListNode *cur = dummyHead;
while(cur->next != nullptr)
{
if(cur->next->val == val)
{
ListNode* tmp = cur -> next;
cur->next = cur->next->next;
delete tmp;
}
else
{
cur = cur->next;
}
}
head = dummyHead -> next;
delete dummyHead;
return head;
}
};