我想在链接列表的末尾添加一个节点。所以我做了一个相同的方法,它给出了预期的结果。但是我不确定这个节目是否正确。请查看程序是否正确。
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;
}
Thanks in advance
两件事:
- 当你接受一个指针作为参数时,你应该总是检查它是否为NULL。在您的情况下,如果是
nd == NULL
,那么您将尝试访问NULL->next
,您的程序可能会崩溃。 - 当你调用
tmp = (node *)malloc(sizeof(node*))
时,你想为节点分配足够的内存,而不是为节点指针。正确的代码是tmp = (node *)malloc(sizeof(node))
。一个更好的选择是写tmp = (node *)malloc(sizeof(*tmp))
,因为如果你决定改变tmp
的类型,分配仍然会工作。