在出现订单的链接列表中接受元素,但显示功能打印最小的数字而不是整个链表

时间:2018-02-26 12:14:08

标签: c sorting data-structures linked-list

按升序接受链表中的元素,然后我想打印整个链表,但它只打印第一个数字并给出运行时错误。在c中的数据结构中可以使用类似的代码。 这里t = start,这样当输入小于起始节点的元素时,起始节点的地址保存在t指针中。

#include<stdio.h>
#include<stdlib.h>
//creation of a linked list
struct node 
{
int data;
struct node *next;
};
void display(struct node *start); //function to display Linked list
int main()
{
struct node *start,*t,*r;
start=NULL;
t=start;

int n,num,i;

print("\n enter the number of elements");
scanf("%d",&num);
    for(i=0;i<num;i++)
    {
        printf("\n enter the %d element",i);
    scanf("%d",&n);
    r=(struct node *)malloc(sizeof(struct node));//
    r->data=n;

    if(start==NULL || start->data>n)//if the element id the first element or the element is less than the current element
        {
        start=r;
        start->next=t;
        }
        else
        {
            t=start;
        while(t!=NULL)
        {
            if(t->data<n && (t->next==NULL || t->next->data>n))//element has to added in the end or else it should be added between the following elements
            {
                r->next=t->next;
                t->next=r;
            }
            t=t->next;
        }
        }
    }
    display(start);
}
void display(struct node *start)
{
    struct node *display;
    display=start;
    while(display!=NULL)
    {
        print("%d ",display->data);
        display=display->next;
    }
}

1 个答案:

答案 0 :(得分:0)

正如您的描述所示,当输入值低于列表头值时,您会遇到问题,您希望将分配的节点放在列表的开头并验证此节点现在指向前一个头:

if( start == NULL || start->data > n )//if the element id the first element or the element is less than the current element
{
    r->next = start; //1
    start=r; //2
    //start->next=t; //3
}
  1. 您新分配的节点r现在应指向您之前start
  2. 的下一个元素
  3. 现在您应该将start指针移动到列表的头部r
  4. 你的错误:

    每次循环中的

    迭代t总是指向NULL,因为`t = t-&gt; next;'和'while(t!= NULL)'。

    在这种情况下,每次if评估为true时(当前值应放在列表的开头),您有效地创建了一个新的列表,其中该节点是头部。< / p>