gpt4 book ai didi

c - 插入循环链表(输出未按预期输出)

转载 作者:行者123 更新时间:2023-11-30 15:05:41 25 4
gpt4 key购买 nike

这是我用C写的方法,用于插入链表。

void insert_beg()
{
temp=(struct node*)malloc(sizeof(struct node));
ptr=(struct node*)malloc(sizeof(struct node));

int data_value;

printf("Enter the value\n");
scanf("%d",&data_value);

temp->info=data_value;

if(header->link==NULL)//when there is no node
{
header->link=temp;
temp->link=header;
}
else//when atleast one node has been created
{
ptr->link=header->link;//ptr is pointing to where header was pointing.
header->link=temp;
temp->link=header;
}

printf("\n\n");
}

这是遍历的代码(基本显示)

 void traverse()
{
ptr=header->link;

while(ptr->link!=header)
{
ptr=ptr->link;
printf("%d\t",ptr->info);
}
printf("\n\n");
}

运行程序时,遍历的输出什么也没有。就好像 for 循环没有运行一样。插入或任何其他事情时没有段错误。我的逻辑正确吗?如果不是,那么我哪里出错了?

最佳答案

原始的 header->link 值由于分配错误而丢失。此外,您不需要为变量 ptr 进行 malloc。修改您的 if/else block 。

if (header == NULL){
header = temp
header->link = temp
}
else//when atleast one node has been created
{
ptr=header->link;//ptr is pointing to where header was pointing.
header->link=temp;
temp->link=ptr;
}

基本上,您总是尝试在第二个位置添加 else block ,但您不是将旧数据放在第三位,而是将第二个位置指向头。

我还发现上述代码存在一些基本问题。该代码既不接受指针变量也不返回任何指针。一旦函数返回,就无法访​​问数据。

如果 header 是全局变量,那么这应该是更改。 tempmalloc 以及与 temp 相关的其他所有内容都应移至 else block 内,因为我们不需要它们如果部分

if (header->link == NULL){
header->data = data
header->link = header
}

如果 header 不是全局变量,那么为了解决完整的问题,函数应该修改为

void insert_beg(struct node **header_dptr) #A double pointer
{
header = *header_dptr
temp=(struct node*)malloc(sizeof(struct node));
int data_value;

printf("Enter the value\n");
scanf("%d",&data_value);

temp->info=data_value;

if(header==NULL)//when there is no node
{
header=temp;
header->link=temp;
}
else//when atleast one node has been created
{
ptr=header->link;//ptr is pointing to where header was pointing.
header->link=temp;
temp->link=ptr;
}

printf("\n\n");
}

关于c - 插入循环链表(输出未按预期输出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39702473/

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