显示功能链接列表代码不起作用

时间:2016-07-27 16:59:34

标签: singly-linked-list

我试图在链接列表的开头添加节点,但是在我的代码中它只显示我输入的最后一个元素。这就是为什么会发生这种情况的原因

 #include <stdio.h>
//node structure
struct node
{
    int data;
    struct node *next;

};
  

//结构

//datatype declaration 
typedef struct node node ;
// head pointer which will indicate starting point of link list
node *head;

//create fuction that will insert values into note and its next pointer field 
void create(int num);
//display function will display the link list 
void display();

main()
{

        int num,i,n;

        printf("enter the nno of node to create : ");
        scanf("%d",&n);

        for(i=0;i<n;++i)
        {
            printf("enter data for node %d= ",i+1);
            scanf("%d",&num);
            create(num);



        }
        display();
  

//显示电话

}
void create(int num)
{
        head=NULL;
        node *temp;
        temp=(node*)malloc(sizeof(node));
        temp->data=num;
        temp->next=head;
        head=temp;




return;
}
  

// function create()end

void display()
{
    node *temp1;
    temp1=head;

     while(temp1!=NULL)
    {
        printf("data : %d-> ",temp1->data);
        temp1=temp1->next;


    }

return;
}
  

// fucntion display()end

2 个答案:

答案 0 :(得分:0)

您的主要问题是:

head=NULL;

因此你的行

temp->next=head;

始终将下一个设为NULL。所以你的所有名单都是 长度为一。

我建议将head声明为static(和 因此从一开始就归零),或在head中初始化main

答案 1 :(得分:0)

您的显示功能似乎很好,您的创建功能应该如下所示:

    void create(int num)
{
node* temp = new node();

        if(head ==NULL)

        { temp->data = num;
          head = temp;
          head->next =  NULL;
        }
       else if(head->next == NULL)
       {
         temp->data = num;
         head->next = temp;
        }
      else
      {
        node* temp2 = head;
        while(temp2->next !=NULL)
        { temp2 = temp2->next;
        }
        temp->data = num;
        temp2->next = temp;
      }



return;
}

如果列表为空,有一个节点,或者多个节点将在最后位置插入,则上面的这个创建函数将放置节点。您现在可以将其插入头部或链接列表术语功能(InsertBeforeFirst)中。当然,如果你有节点* head up top应该初始化为NULL;