gpt4 book ai didi

c - 删除传递给链表 C 中函数的单个节点

转载 作者:行者123 更新时间:2023-11-30 15:55:01 24 4
gpt4 key购买 nike

我有一个函数deleteNode,它接收列表的头部和要删除的节点。当我运行它时,它成功删除了该节点,但它也删除了它之后的所有内容。我相信这与我重建列表有关,但我无法弄清楚我的逻辑错在哪里,所以我需要一些帮助。函数代码如下:

void deleteNode(struct lnode** head, struct lnode* node) {
struct lnode* nextNode = nodeGetNext(node);
printf("word: \n%s\n",nodeGetWord(nextNode));
struct lnode* nodeToDelete = node;


*head = nodeGetNext(nodeToDelete);
printf("Head word: %s\n",nodeGetWord(*head));
free(nodeToDelete);
}

最佳答案

尝试把它画出来......我不知道你的函数到底是做什么的,所以这根据名称做了一些假设,但你可以明白这个想法。

  1. 您传入head(红色“h”)
  2. 您传入要删除的节点(蓝色“n”)
  3. 您将本地nextNode设置为nodeGetNext(node)的返回值(我假设这是要删除的节点之后的节点,绿色的“nn”)
  4. 您将 nodeToDelete(紫色 ntd)设置为 node

enter image description here

因此您的代码将指向 nodeGetNext(nodeToDelete)。这实际上是您未使用的变量nextNode。然后你释放nodeToDelete

我很确定这不是您想要做的,除非您知道要删除的节点就在 head 旁边。我认为更正常的算法是:

  1. 从 head 中搜索要删除的节点
  2. 在“要删除的节点”+1 旁边设置“要删除的节点”-1
  3. 删除“要删除的节点”

头部有特殊情况,或者空列表等。

关于c - 删除传递给链表 C 中函数的单个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12587200/

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