c - 释放一个双链表
问题描述
我正在尝试释放一个双链表,我的问题是我是否还需要释放每个节点中的所有数据和指针。谢谢你。
功能:
static void free_list(Room *head, Room *head2) {
Room *tmp = head;
Room *tmp2 = head2;
Room *store;
Room *store2;
tmp = head2;
tmp2 = head;
printf("\nFreeing trap list...\n");
sleep(2);
while (tmp != NULL) {
store = tmp->pNext;
free(tmp);
tmp = store;
}
printf("\nFreeing rooms list...\n");
sleep(2);
while (tmp2 != NULL) {
store2 = tmp2->pNext;
free(tmp2);
tmp2 = store2;
}
}
结构:
typedef struct Room {
struct Room *forward;
struct Room *left;
struct Room *right;
struct Room *previous;
struct Room *pPrev;
struct Room *pNext;
Room_Type Room_Type;
bool emergency_call;
} Room;
那么在示例中,我是否还需要释放前向指针以及其他类型?head
和head2
是两个不同的指针,每个指向两个不同列表的开头。
解决方案
这种定义容器的方式非常混乱:
typedef struct Room{
struct Room* forward;
struct Room* left;
struct Room* right;
struct Room* previous;
struct Room* pPrev;
struct Room* pNext;
Room_Type Room_Type;
bool emergency_call;
} Room;
分而治之:
typedef struct Node {
struct Node* pPrev;
struct Node* pNext;
Room_Type Room_Type;
bool emergency_call;
} Node;
typedef struct List {
struct Node* pHead;
struct Node* pTail;
} List;
使用这种方法,一个循环就足够了:
void free_list(List *list)
{
Node *node = list->pHead;
while (node != NULL)
{
Node *next = node->pNext;
free(node);
node = next;
}
free(list);
}
推荐阅读
- html - 如何使用 Vue / Html 脚本处理 json (http-Request)
- flask-appbuilder - 主题示例中的 MyIndexView 错误在 Flask-AppBuilder 中不起作用
- c# - 使用 .Net Core 在 Raspberry Pi 上使用蓝牙 LE
- automated-tests - Nunit3 中的动态测试用例
- javascript - plotly.js 在轴上散布标记大小
- php - Laravel Maatwebsite excel大文件上传失败(导入文件上传失败。)
- html - 动态长度html和角度js
- reactjs - 反应 JSON 输入的意外结束 onSubmit
- java - 字符串解析并从文本字符串中获取数组索引
- scala - 由 BackoffSupervisor 监督的 Actor 在重启后丢失了隐藏的消息