有一个不带头结点的单链表L,设计一个算法释放其中的所有结点完整c++代码
时间: 2024-09-24 14:13:24 浏览: 71
为了释放给定无头结点的单链表 `L` 中的所有节点,你需要遍历整个链表,并对每个节点释放其占用的内存。以下是完整的 C++ 代码实现:
```cpp
#include <iostream>
// 定义链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {} // 构造函数
};
// 释放链表节点函数
void releaseList(ListNode* L) {
if (L != NULL) { // 遍历链表直到最后一个节点
ListNode* temp = L;
while (temp->next != NULL) {
ListNode* nextNode = temp->next; // 保存下一个节点指针
delete temp; // 释放当前节点
temp = nextNode; // 更新临时指针指向下一个节点
}
// 最后一个节点不需要删除,因为它已经是NULL了
delete temp;
}
}
int main() {
// 假设这里已经创建了一个链表 L
// ...
// 调用释放函数
releaseList(L);
std::cout << "链表已全部释放" << std::endl;
return 0;
}
```
这个程序首先检查链表是否为空(`L != NULL`),然后通过一个临时指针 `temp` 遍历链表。在每次迭代中,它会将 `temp` 指向的节点存储到 `nextNode` 变量中,然后释放 `temp` 所引用的节点,接着更新 `temp` 指向下一个节点。当 `temp` 成为 `NULL` 时,说明遍历到了链表的末尾,此时最后一个节点也被释放。
阅读全文