单链表的清空与销毁的代码有何不同,数据结构,C/C++,
时间: 2024-10-23 20:12:04 浏览: 20
LinkList.zip_数据结构_C/C++_
在C/C++中,单链表的清空和销毁操作有所不同:
1. **清空链表**:
清空链表主要是将链表的所有节点设置为空,但保留链表本身的结构。通常会遍历整个链表,对于每个节点,将其指针设为NULL。这是一个非释放资源的操作,仅针对内存管理。
```cpp
void clearList(ListNode* &head) {
ListNode* current = head;
while (current != nullptr) {
ListNode* temp = current;
current = current->next;
delete temp; // 或者设置为nullptr
}
head = nullptr; // 将头节点设置为空
}
```
这里`ListNode* &head`是一个引用传递,以便在函数内部修改链表的头指针。
2. **销毁链表**:
销毁链表意味着不仅要把所有节点设置为空,还要释放它们所占用的内存。这通常包括删除所有节点,以及可能的动态分配空间。如果是动态创建的链表,你需要使用`delete[]`对链表进行逐个节点的释放,并最终释放整个链表的存储区域。
```cpp
void destroyList(ListNode* head) {
if (head == nullptr) return;
ListNode* current = head;
while (current != nullptr) {
ListNode* next = current->next;
delete current; // 释放当前节点
current = next;
}
// 如果链表是在堆上动态分配的
delete [] head; // 指向首地址释放整个内存块
head = nullptr;
}
```
阅读全文