对于我的程序,我需要创建一个接受链表作为参数的函数,然后从列表中删除第一个节点。还有其他步骤,但我想先完成此子部分。
这是我到目前为止所拥有的:
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/