此代码给出head->;next=NULL,但不应为空 #包括 #包括 #包括 //堆栈的链表实现 typedef结构栈节点; 结构堆栈{ int值; 节点*下一步; }; 无效推送(节点*,int); void-pop(节点*); int main(){ node*head=malloc(sizeof(node)); head->next=NULL; 推(头,5); if(head->next==NULL){ printf(“head->next为NULL”); } 弹头; } 无效推送(节点*头部,int值){ 头->值=值; node*temp=malloc(sizeof(node)); 温度->下一步=头部; 压头=温度; }

此代码给出head->;next=NULL,但不应为空 #包括 #包括 #包括 //堆栈的链表实现 typedef结构栈节点; 结构堆栈{ int值; 节点*下一步; }; 无效推送(节点*,int); void-pop(节点*); int main(){ node*head=malloc(sizeof(node)); head->next=NULL; 推(头,5); if(head->next==NULL){ printf(“head->next为NULL”); } 弹头; } 无效推送(节点*头部,int值){ 头->值=值; node*temp=malloc(sizeof(node)); 温度->下一步=头部; 压头=温度; },c,linked-list,stack,C,Linked List,Stack,上面的代码打印head->next=NULL,尽管它不应该打印,因为当调用push时,然后是temp->next=head,然后是head=temp,所以现在head->next应该等于上一个head的位置。在中,请参见push()函数,您希望更改列表的标题,但实际上您是通过值传递它的,所以它不会受到影响 node*head表示您有一个指向节点的指针,并且您实际上只能修改该节点的属性,而不能修改head指针本身 您应该使用节点**head,它是指向指针的指针,因此这意味着您可以使用它实际修改he

上面的代码打印head->next=NULL,尽管它不应该打印,因为当调用push时,然后是temp->next=head,然后是head=temp,所以现在head->next应该等于上一个head的位置。

在中,请参见push()函数,您希望更改列表的标题,但实际上您是通过值传递它的,所以它不会受到影响

node*head表示您有一个指向节点的指针,并且您实际上只能修改该节点的属性,而不能修改head指针本身

您应该使用节点**head,它是指向指针的指针,因此这意味着您可以使用它实际修改head指针

这是一个非常简短的解释。。。请尝试阅读更多关于C中的传递值和传递引用的信息

修改后,还必须将head指针的地址作为参数(&head)传递,并将其更改为*head(在函数中)

代码如下:

无效推送(节点**,int); void-pop(节点*)


您永远不会更新
head->next
<代码>压头=温度正在修改本地副本。您最后一段中的逻辑是错误的-
temp->next=head
然后
head=temp
所以
head->next==head
。您理解按值传递的概念吗?在c中搜索并阅读关于模拟按引用传递的内容。@Someprogrammerdude,如果我说head=temp now,这两个都是指针,那么head现在有了新创建节点的位置,对吗?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

// linked-list implementation of stack

typedef struct stack node;

struct stack{

    int value;
    node* next;    

};

void push(node*,int);
void pop(node*);



int main(){

node* head=malloc(sizeof(node));
head->next = NULL;
push(head,5);
if (head->next == NULL){
printf("head->next is NULL.");
}
pop(head);

}


void push(node* head,int value){

    head->value = value;
    node* temp = malloc(sizeof(node));
    temp->next = head;
    head = temp;

}
int main(){

node* head=malloc(sizeof(node));
head->next = NULL;
push(&head,5);
if (head->next == NULL){
printf("head->next is NULL.");
}
//pop(head);

}


void push(node** head,int value){

    (*head)->value = value;
    node* temp = malloc(sizeof(node));
    temp->next = *head;
    (*head) = temp;

}