gpt4 book ai didi

c - 通过函数修改LinkedList

转载 作者:行者123 更新时间:2023-11-30 16:31:30 26 4
gpt4 key购买 nike

对于我的程序,我需要创建一个接受链表作为参数的函数,然后从列表中删除第一个节点。还有其他步骤,但我想先完成此子部分。

这是我到目前为止所拥有的:

 struct node *del_the_first(struct node *head)  {

struct node *temp = head;
head = head->next;
temp->next = NULL;
return NULL;

}

我相信我的解决方案是正确的,但目前我无法对其进行测试。我更感兴趣的是为什么我是错的或没有错。

最佳答案

您应该测试的是:

  • 在函数末尾打印 temp 的值,
    这就是函数开头的 head
  • 在函数末尾打印 head 的值,
    这是函数返回后列表的头部应该是什么
  • 打印(从函数外部,例如从 main)变量的值
    它应该指向列表的头部,
    特别是在删除第一个元素之后

您会注意到,在函数之外,指向列表头部的指针仍然指向第一个元素仍然所在的位置。
你不希望那样,是吗?指向列表头部的变量应该指向列表的第二个元素,不是吗?

如果上述情况成立,您可能希望在从函数返回之前对列表的前一个元素使用 free()

阅读本文以了解有关如何解决第一个问题的更多信息:
Parameter Passing in C - Pointers, Addresses, Aliases

基本上,您需要返回指向列表头部的指针的新值:

struct node *del_the_first(struct node *head)
{
struct node *temp = head;
head = head->next;
temp->next = NULL; /* not really needed */
free(temp);
return head;
}

然后这样调用它:

global_head = del_the_first(global_head);

请注意,此代码假设列表不为空,
请参阅 ccpan 的答案,了解如何删除此假设。

关于c - 通过函数修改LinkedList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50539534/

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