gpt4 book ai didi

c - 删除单向链表中的节点

转载 作者:太空狗 更新时间:2023-10-29 16:50:36 26 4
gpt4 key购买 nike

如何删除单向链表中只有一个指针指向待删除节点的节点?

[开始和结束指针未知,可用信息是指向应删除的节点的指针]

最佳答案

您可以在不获取前一个节点的情况下删除一个节点,方法是让它模拟以下节点并删除该节点:

void delete(Node *n) {
if (!is_sentinel(n->next)) {
n->content = n->next->content;
Node *next = n->next;
n->next = n->next->next;
free(next);
} else {
n->content = NULL;
free(n->next);
n->next = NULL;
}
}

如您所见,您需要特别处理最后一个元素。我使用一个特殊节点作为标记节点来标记具有 contentnext 的结尾是 NULL

更新:行 Node *next = n->next; n->next = n->next->next 基本上打乱节点内容,并释放节点: Image that you get a reference to node B to be deleted in:

   A           / To be deleted
next ---> B
next ---> C
next ---> *sentinel*

第一步n->content = n->next->content:复制以下节点的内容到要“删除”的节点:

   A           / To be deleted
next ---> C
next ---> C
next ---> *sentinel*

然后,修改点:

   A           / To be deleted
next ---> C /----------------
next ---| C |
next ---> *sentinel*

真正释放了下面的元素,进入到最后的情况:

   A           / To be deleted
next ---> C
next ---> *sentinel*

关于c - 删除单向链表中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1960562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com