-
Notifications
You must be signed in to change notification settings - Fork 7k
Open
Description
大佬,问下我创建完一个单链表之后,删除一个节点,但是该节点还存在在内存中,不知道为啥
下面是我的代码
// 单链表节点
struct listNode {
int value;
struct listNode *next;
};
// 带头节点的单链表 长度len记录在头结点的value中
listNode *linkedListCreate(int len) {
listNode *head = new listNode{len, nullptr};
listNode *p = head;
for (int i = 1; i <= len; ++i) {
p->next = new listNode{i, nullptr};
p = p->next;
}
return head;
}
// 删除(删除要先找到该节点的前前驱结点, 不能删除头结点)
void del(listNode *head, listNode *elem) {
if (!elem || !head)
return;
listNode *pre = head->next;
while (pre->next->value != elem->value) {
pre = pre->next;
}
pre->next = elem->next;
elem->next = nullptr;
head->value--;
delete elem;
}
// 找到 value 的节点,并返回对应节点的地址
listNode *find(listNode *head, int value) {
listNode *p = head->next;
while (p) {
if (p->value == value)
break;
p = p->next;
}
if (p == nullptr) {
std::cout << "改节点不存在与链表中" << std::endl;
return nullptr;
}
return p;
}
int main() {
// 创建链表
listNode *list = linkedListCreate(6);
// 删除
listNode *node3 = find(list, 3);
del(list, node3);
std::cout << "地址:" << node3 << " value:" << node3->value << std::endl;
// 打印结果: 地址:0x7fe9b5604740 value:3
return 0;
}Metadata
Metadata
Assignees
Labels
No labels