gpt4 book ai didi

c - 链表插入节点什么都不显示

转载 作者:太空宇宙 更新时间:2023-11-04 00:53:18 25 4
gpt4 key购买 nike

#include<stdio.h>
#include<stdlib.h>

struct node
{
int data;
struct node *next;
};

void insert( struct node *q,int num)
{
struct node *temp;

if( q == NULL)
{
q = (struct node*)malloc(sizeof(struct node));
q->data = num;
q->next = NULL;
}
else
{
temp = q;
while( temp != NULL)
{
temp = temp->next;
}
temp = (struct node*)malloc(sizeof(struct node));
temp->data = num;
temp->next = NULL;
}
}

void display(struct node *q)
{
struct node *temp;
temp = q;
while(temp != NULL)
{
printf("%d",temp->data);
temp = temp->next;
}
}



int main()
{
struct node *a;
a = NULL;
insert( a,13);
insert( a,13);
display(a);
return 0;
}

insert 函数中,q 是一个指向结构节点的指针,它被初始化为 NULL。

如果 q 是否为 NULL,我会看到 1st。如果它为空,那么我正在分配堆内存、数据和下一个指针,这样 q 现在是一个指针,它正在取消引用第一个数据。如果 q 不为 NULL,那么我取一个指向 q 指向的结构节点的临时指针,所以直到 temp 变为 NULL temp 转到 temp->next,然后它分配堆内存,将数据和下一个指针指向空值。

但它对我的显示功能没有任何显示,请纠正我这一点,以及如何在链表中使用堆栈和堆内存。

最佳答案

回想一下,在 C 中参数是按值传递,包括指针参数。

q == NULL 时,您正在分配内存并将该内存分配给 q,但这不会改变q 在您的函数之外:只有q 您的函数中的副本会被更改。

为了改变参数q指向的内容,并让这些改变反射(reflect)在你的函数之外,你需要传递一个指向指针的指针,例如:

void insert(struct node **q, int num)

并改变您使用q的方式,例如

if (*q == NULL)
*q = (struct node *) malloc(sizeof(struct node));

此外,在您的其他情况下,您应该循环直到 temp->next == NULL,然后添加您的新节点:

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

关于c - 链表插入节点什么都不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11161086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com