这个函数应该将一个节点插入到一个链表中,但是它有一个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看起来有点没用。

10-08 03:46