无法在 c++ 链表的开头插入

Cannot insert at the beginning of c++ linked list

本文关键字:开头 插入 链表 c++      更新时间:2023-10-16

我正在尝试创建一个用于在链表开头插入的函数。我将我的代码与网络上的一些代码进行了比较,结果或多或少是相同的。但是,当我尝试使用 CodeBlock 编译它时,打印的输出只有数字 0。任何人都可以解释为什么insertFirst函数不起作用或显示错误(如果有)吗?

struct node{
    int data;
    struct node *next;
};
node insertFirst(node *head, int newData){
        node *temp = new node;
        temp -> data = newData;
        temp -> next = head;
        head = temp;
        return *head;
}
int main(){
 int i;
 node *first, *cur;
 first = new node;
 first -> data = 0;
 first -> next = 0;
 for(i = 1; i <= 10; i++){
    insertFirst(first, i);
 }
 cur = first;
 while(cur){
    cout << cur -> data << endl;
    cur = cur -> next;
 }
}

您的第一个将保留在第一位,因为您不会在调用中更新它。像这样定义你的函数:

node insertFirst(node *&head, int newData)

因此,您将在"head"指针上获得一个引用,并将其传递回调用函数。

我认为SHR想提到的是你更改了你的代码,例如

node* insertFirst(node *head, int newData){
    node *temp = new node;
    temp -> data = newData;
    temp -> next = head;
    return temp;
}

稍后你可以通过以下方式调用它

for(i = 1; i <= 10; i++){
    first = insertFirst(first, i);
}

因此,该函数始终返回指向列表中第一个对象的指针。

in node insertFirst(node *head, int newData) head 在参数中,而不是在 out 中。

因此,在main它没有被改变。

以更新first值的方式使用first = insertFirst(first, i);