改成这样以后只是运行时间减少了,占用内存并没有减少
时间: 2023-10-28 21:44:43 浏览: 16
如果你修改了代码以减少运行时间,但内存占用没有减少,这可能是因为在删除重复节点时只是将节点从链表中移除,但并没有释放节点的内存空间。
要释放删除节点的内存空间,可以通过遍历整个链表,逐个删除节点并释放内存。以下是一个示例代码:
```cpp
ListNode* deleteDuplicates(ListNode* head) {
if (!head || !head->next) {
return head;
}
ListNode* cur = head;
ListNode* prev = nullptr;
while (cur) {
ListNode* nextNode = cur->next;
bool duplicate = false;
while (nextNode && cur->val == nextNode->val) {
ListNode* temp = nextNode;
nextNode = nextNode->next;
delete temp; // 释放删除节点的内存空间
duplicate = true;
}
if (duplicate) {
if (prev) {
prev->next = nextNode;
} else {
head = nextNode;
}
delete cur; // 释放删除节点的内存空间
} else {
prev = cur;
}
cur = nextNode;
}
return head;
}
```
在这个示例中,我们使用了两个指针`cur`和`prev`来遍历链表。如果发现重复节点,则将`prev->next`指向下一个非重复节点,并释放删除节点的内存空间。
请注意,在这个示例中使用了`delete`操作符来释放被删除节点的内存空间。如果节点是使用`new`操作符动态分配的内存空间,则需要手动释放。但如果节点是栈上的局部变量或者是静态分配的内存空间,则不需要手动释放。
另外,如果你在代码中使用了智能指针(如`std::shared_ptr`或`std::unique_ptr`)来管理节点的内存,则可以自动释放内存,无需手动释放。