【发布时间】:2014-08-06 11:09:44
【问题描述】:
我已经编写了用于在第 n 个位置插入节点的代码。
当用户在节点中输入 1 位数字时,它可以正常工作,但是当用户输入等于或超过两位数字时,它只会在无限循环中继续打印最后一个节点。
我不知道出了什么问题。我的代码在下面
#include<stdio.h>
#include<stdlib.h>
struct st
{
int roll;
char name[20];
struct st *next;
};
void add_middle(struct st **ptr)
{
struct st *temp,*temp1;
temp=malloc(sizeof(struct st ));
printf("netre ur name\n");
scanf("%s",temp->name);
printf("enter ur roll\n");
scanf("%d",&(temp->roll));
if((*ptr==NULL)||(temp->roll<(*ptr)->roll))
{
temp->next=*ptr;
*ptr=temp;
}
else
{
temp1=*ptr;
while(temp1)
{
if((temp1->next==NULL)||(temp1->next->roll>temp->roll))
{
temp1->next=temp;
temp->next=temp1->next;
break;
}
temp1=temp1->next;
}
}
}
void display(struct st *ptr)
{
while(ptr)
{
printf("%s %d\n",ptr->name,ptr->roll);
ptr=ptr->next;
}
}
main()
{
struct st *headptr=0;
add_middle(&headptr);`
add_middle(&headptr);
add_middle(&headptr);
display(headptr);
}
【问题讨论】:
-
我假设您的代码中有错误:
add_middle(&headptr);`?请注意该行末尾的`。 -
尽管缺少输入验证,但如果您利用该指针对指针的最佳表现,您可以让自己更轻松; see example。无论如何,祝你好运。
-
我希望代码从头部开始查看每个现有节点,如果没有节点,将现有节点与新节点进行比较,否则仅将现有 code.next 与 ptr 更新到新节点和新节点.next = null。如果新节点大于现有节点,则更新 2 个下一个指针(现有节点到新节点和新节点到先前现有节点。作为建议,像 temp 和 temp1 这样的名称非常令人困惑。最好以与其相关的方式命名它们实际内容。
标签: c data-structures linked-list dynamic-memory-allocation