题目详见https://leetcode.cn/problems/remove-linked-list-elements/
题解代码
/**
* 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 != NULL){
if(cur->next->val == val){
ListNode* temp = cur->next;
cur->next = cur->next->next;
delete temp;
}
else{
cur = cur->next;
}
}
head = dummyhead->next;
delete dummyhead;
return head;
// delete temp; 为什么不在这里进行delete temp呢?
}
};
一个问题
为什么不在最后统一进行删除内存操作呢?而要分别先删除temp再删除dummyhead?
如果我们尝试最后统一删除temp以及dummyhead,我们会得到报错,而不是错误的用例
这是因为在C++中,声明的变量有其作用域,在这里temp的作用域就是在这个if块中,离开了if块也就没法再获取该变量的内容。
笔者也在新手学习期中,所写的内容主要与大家交流学习使用,如有发现任何问题敬请指正!