题目详见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块也就没法再获取该变量的内容。
笔者也在新手学习期中,所写的内容主要与大家交流学习使用,如有发现任何问题敬请指正!