ListNode* deleteDuplicates(ListNode* head) { if (!head || !head->next) { return head; } ListNode* cur = head; while (cur->next) { if (cur->val == cur->next->val) { cur->next = cur->next->next; } else { cur = cur->next; } } return head; }怎么释放已经删除的节点的空间
时间: 2024-02-11 22:22:57 浏览: 69
在这段代码中,已经删除的节点的空间并没有被显式地释放。这是因为在C++中,删除节点的操作只是将节点从链表中移除,并没有实际释放节点所占用的内存空间。这是一个常见的做法,因为在链表结构中,我们无法直接访问到被删除节点之后的节点,所以无法直接释放被删除节点的内存。
在实际使用中,如果需要释放已删除节点的内存空间,可以通过遍历整个链表,逐个删除节点并释放内存。以下是一个示例代码:
```cpp
ListNode* deleteDuplicates(ListNode* head) {
if (!head || !head->next) {
return head;
}
ListNode* cur = head;
while (cur->next) {
if (cur->val == cur->next->val) {
ListNode* temp = cur->next;
cur->next = cur->next->next;
delete temp; // 释放删除节点的内存空间
} else {
cur = cur->next;
}
}
return head;
}
```
在这个示例中,我们使用了`delete`操作符来释放被删除节点的内存空间。请注意,这里我们假设链表中的节点是使用`new`操作符动态分配的内存空间,如果节点是栈上的局部变量或者是静态分配的内存空间,则不需要手动释放。
此外,还可以考虑使用智能指针(如`std::shared_ptr`或`std::unique_ptr`)来管理节点的内存,这样可以避免手动释放内存的问题。
阅读全文