这个函数应该将一个节点插入到一个链表中,但是它有一个bug,并且插入的节点不会显示在链表中。虫子在哪里?
int insert(struct Node *headList, int payload) {
struct Node *newNode;
newNode = malloc(sizeof(struct Node));
assert (newNode != NULL);
newNode->payload = payload;
newNode->next = headList;
headList = newNode;
return 0;
}
我很确定
Node *headList
是按值传递的,因为headList
在这个函数之外不会更改,但我不确定如何修复这个问题。我需要指针还是什么? 最佳答案
此函数修改此指针指向的struct Node
:
int insert(struct Node *headList, int payload) {
...
headList = newNode;
...
}
但是,要修改指针本身,需要传递一个指针地址来初始化指针:
int insert(struct Node **headList, int payload) {
...
*headList = newNode; // <-- modifies the pointer itself
...
}
或者您也可以使用返回值来处理这个问题,因为
return 0
看起来有点没用。