我正在尝试在链表的开头插入一个函数。我将我的代码与网络上的一些代码进行了比较,结果或多或少相同。但是,当我尝试使用CodeBlocks编译它时,打印的输出只是数字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;
}
}
答案 0 :(得分:1)
你的第一个仍然是第一个,因为你没有在通话中更新它。像这样定义你的函数:
options.ClaimActions.Remove("exp");
所以你会得到一个关于你的“头”指针的引用,它会被传递回调用函数。
答案 1 :(得分:1)
我认为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);
}
所以函数总是返回指向列表中第一个对象的指针。
答案 2 :(得分:0)
node insertFirst(node *head, int newData)
头中的在参数中,而不是在out。
因此main
没有改变。
以更新first
值使用first = insertFirst(first, i);