给定一个带头节点的单链表设计算法,按递增次序输出单链表中各节点的数据元素,并释放节点所占的存储空间,要求不使用数组作为辅助空间。用 C++ 写出代码
时间: 2024-10-28 17:09:06 浏览: 13
西南交通大学-zhy-数据结构第4次作业.docx
5星 · 资源好评率100%
为了满足题目要求,我们可以使用迭代的方式遍历链表,同时在访问节点的同时释放节点的空间。下面是一个使用C++编写的简单示例:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
~ListNode() { // 析构函数自动调用,这里用于释放节点内存
delete this; // 释放当前节点
}
};
void printLinkedList(ListNode* head) {
// 初始化一个临时指针,初始值为头节点
ListNode* current = head;
while (current != nullptr) {
cout << current->val << " "; // 输出节点值
// 更新临时指针到下一个节点
ListNode* temp = current;
current = current->next;
// 调用析构函数释放当前节点内存
delete temp;
}
cout << endl; // 结束输出后换行
}
int main() {
// 创建链表实例并添加节点,这里仅作演示,实际应用需要自己构建链表
ListNode* list = new ListNode(5);
list->next = new ListNode(3);
list->next->next = new ListNode(8);
list->next->next->next = new ListNode(1);
printLinkedList(list); // 输出链表并释放节点内存
return 0;
}
```
这段代码首先定义了链表节点结构体`ListNode`,并在其中添加了一个析构函数,在节点被释放时自动调用。`printLinkedList`函数使用迭代的方式遍历链表,逐个输出节点值并释放节点。注意,由于链表节点在遍历时依次被释放,所以在下一个节点上,前一个节点已经不存在,所以可以安全地调用`delete this`。
阅读全文