gpt4 book ai didi

c - 链表插入无限循环

转载 作者:行者123 更新时间:2023-11-30 17:20:32 25 4
gpt4 key购买 nike

在链表末尾插入节点时,我的代码正在无限循环中运行。
使用IDE-Eclipse64位操作系统

 #include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int info;
struct Node *next;

}node;
node *head;
node *ptr1;
void insert(int x);
void show();
int main()
{
int i,x,n;
puts("Enter number of elements\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
puts("Enter elements");
scanf("%d",&x);
insert(x);

}
show();
return 0;
}

//向链表中插入数据

    void insert(int x)
{
node *ptr;
ptr1=head;
ptr=(node*)malloc(sizeof(node));
ptr->info=x;
if(head==NULL)
{
ptr->next=head;
head=ptr;
}
else
{
ptr1->next=NULL;
ptr1=ptr;
}
}

//打印列表详细信息 //无法弄清楚这个函数

    void show()
{
while(ptr1->next!=NULL)
{
printf("%d\n",ptr1->info);
ptr1=ptr1->next;
}



}

最佳答案

每次代码进入插入函数时,ptr1 都会设置为 head,然后在 else 小节中将其设置为 ptr,但没有任何内容指向任何先前的项目。这是一个示例,以防您需要。

typedef struct Node
{
int info;
struct Node *next;
}node;

node *head = NULL;
void insert(int x);
void show();
int main()
{
int i,x,n;
puts("Enter number of elements\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
puts("Enter elements");
scanf("%d",&x);
insert(x);

}
show();
return 0;
}

void insert(int x)
{
node *ptr = (node*)malloc(sizeof(node));
ptr->info=x;
ptr->next=head; /* this will always add the new entry at the beginning of the list all you need it to initialize the head to NULL*/
head = ptr; /* move the head so that it points to the newly created list element */
}

void show()
{
node *ptr1 = head;
printf("%d\n",ptr1->info); /* print the head */
while(ptr1->next!=NULL) /* now walk the list remember it first looks if the next pointer in the list is null first then it jumps on next element in case it is not*/
{
ptr1=ptr1->next;
printf("%d\n",ptr1->info);
}
}

记住在退出主程序之前创建一个函数来释放列表元素。

关于c - 链表插入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28560859/

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