此代码给出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,尽管它不应该打印,因为当调用push时,然后是temp->next=head,然后是head=temp,所以现在head->next应该等于上一个head的位置。在中,请参见push()函数,您希望更改列表的标题,但实际上您是通过值传递它的,所以它不会受到影响 node*head表示您有一个指向节点的指针,并且您实际上只能修改该节点的属性,而不能修改head指针本身 您应该使用节点**head,它是指向指针的指针,因此这意味着您可以使用它实际修改head指针 这是一个非常简短的解释。。。请尝试阅读更多关于C中的传递值和传递引用的信息 修改后,还必须将head指针的地址作为参数(&head)传递,并将其更改为*head(在函数中) 代码如下: 无效推送(节点**,int); void-pop(节点*)此代码给出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
<代码>压头=温度正在修改本地副本。您最后一段中的逻辑是错误的-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;
}