c - 在c中的链表末端节点插入一个元素

标签 c linked-list

我想在链接列表的末尾添加一个节点。所以我做了一个同样的方法,它给出了预期的结果。但我不确定这个程序是否正确。请查看程序是否正确。

node *insert_end_node(node *nd, int value) {
  node *tmp, *p;

  tmp = (node *)malloc(sizeof(node *));

  tmp->data = value;
  tmp->next = NULL;
  p = nd;
  while (p->next != NULL) {
    p = p->next;
  }

  p->next = tmp;

  // nd =tmp;

  return nd;
}

提前致谢

最佳答案

有两件事:

  1. 当您接受指针作为参数时,您应该始终检查它是否为 NULL。在您的情况下,如果nd == NULL,那么您将尝试访问NULL->next,并且您的程序可能会崩溃。
  2. 当您调用tmp = (node *)malloc(sizeof(node*))时,您希望为节点分配足够的内存,而不是为节点指针分配足够的内存。正确的代码是tmp = (node *)malloc(sizeof(node))。更好的选择是编写 tmp = (node *)malloc(sizeof(*tmp)),因为如果您决定更改 tmp 的类型,分配将还在工作。

关于c - 在c中的链表末端节点插入一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24586193/

相关文章:

c++ - Socket connect() 总是成功(TCP over ActiveSync)

c - PaStreamCallbackTimeInfo成员全部为0

pointers - 解码嵌套结构和类型断言

c++ - 使用 `delete` 从链表中删除节点

java - 添加联系人到 mac 联系人?

c - 如何强制删除C中的文件?

c - !! c 运算符,是两个 NOT 吗?

java - 将项目移动到 LinkedList 的前面

c - 传递给函数的指针不重新分配

java - 数组类型相同,链表类型不同