struct node{
int data; struct node *next;
};
void push(struct node* head, struct node* n){
if(n!= NULL){
if(head==NULL)
head = n;
else {
n->next = head;
head = n;
}
} else printf("Cannot insert a NULL node");
}
struct node* pop(struct node* head){
if(head!=NULL){
struct node *n = head;
head = head->next;
return n;
} else {
printf("The stack is empty");
return NULL;
}
}
int main(){
int i;
struct node *head = NULL, *n;
for(i=15;i>0;i--){
struct node *temp = malloc(sizeof(struct node));
temp -> data = i;
temp->next = NULL;
push(head,temp);
}
n = head;
while(n!=NULL){
printf("%d ",n->data);
n=n->next;
}
return 0;
}
答案 0 :(得分:5)
您需要将指针头的地址传递给函数push。我的情况是头部没有被修改,因为你只是传递头部的值。
void push(struct node** head, struct node* n){
if(n!= NULL){
if(*head==NULL)
*head = n;
else {
n->next = *head;
*head = n;
}
} else printf("Cannot insert a NULL node");}
int main(){
int i;
struct node *head = NULL, *n;
for(i=15;i>0;i--){
struct node *temp = (struct node *)malloc(sizeof(struct node));
temp -> data = i;
temp->next = NULL;
push(&head,temp);
}
n = head;
while(n!=NULL){
printf("%d ",n->data);
n=n->next;
}
return 0;}
答案 1 :(得分:3)
您将head
指针按值传递给函数push(head,temp);
。在head
内完成的push
更改不会反映在main()
函数中。
您应将head
的地址传递给push()
。
push(&head, temp);
和push()
内部:
*head = n;
pop()
需要进行类似的更改。您可以通过printf
中的main()
中的printf("%p\n", head);
添加head
来验证我的意思。\n
。 printf
的值将保持不变。
stdout
内的语句末尾添加stdout
,它会立即刷新{{1}}流,因此您的输出会立即打印在{{1}上(你的电脑屏幕)。