我试图创建一个链表,但头指针始终指向空,因此在获取链表的大小和元素后没有输出。另外,当我将 head 作为 Main 函数内部的指针时,当我尝试调用推送和显示函数时,它会给我分段错误。
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node * next;
}node;
void push(node *head,int value){
node * newnode= (node*)malloc(sizeof(node));
newnode->data = value;
newnode->next = NULL;
printf("%d",value);
if(head==NULL){
head = newnode;
return;
}
node* iter = head;
while(iter->next!=NULL){
iter = iter->next;
}
iter->next = newnode;
}
void display(node *head){
node *iter = head;
while(iter!=NULL){
printf("%d->",iter->data);
iter = iter->next;
}
return;
}
int main(){
node *head = NULL;
int size;
scanf("%d",&size);
for(int i=0;i<size;i++){
int value;
scanf("%d",&value);
push(head,value);
}
display(head);
}
您传入
head
函数的 push()
是一个 node*
,它按值传递给函数 push()
。这意味着您可以修改 node
head
所指向的内容,但不能使 head
指向其他内容(正确地说,您可以,但这种更改仅在该函数调用期间持续,并且不会影响 main 中的原始 head
。
因此您需要将指针传递给
node*
。你的函数将如下所示:
void push(node** head, int value) {
node* newnode = (node*)malloc(sizeof(node));
newnode->data = value;
newnode->next = NULL;
printf("%d", value);
if (*head == NULL) {
*head = newnode;
return;
}
node* iter = *head;
while (iter->next != NULL) {
iter = iter->next;
}
iter->next = newnode;
}
你会这样称呼它
push(&head, value);
。