c - 通过函数修改LinkedList

标签 c linked-list

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

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

 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/

相关文章:

algorithm - 使用链表遍历二叉树

c - 如何确定缓冲区的大小

c - fgets 不等待标准输入

c - 函数和数组

C 字符串作为链表?

c - 如何在 if-else 语句中使用多个 execvp 调用?

java - 从Java学C++,尝试做一个链表

c++ - 按位运算的性能下降

C int 指针分配大小

c - 计算链表中的元素时出现段错误