链表程序错误输出

时间:2014-04-28 09:46:03

标签: c linked-list

我写了下面的程序,它创建了一个新的链表并打印其元素。 我在这里遇到的问题是,当我打印值时,只打印最后一个节点的值,并且打印几次。 请看一下,告诉我在这个程序中我做错了什么。

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

struct node
{
       int data;
       struct node *link;
}*head=NULL;

void print()
{
     struct node *temp=NULL;
     temp=head;
     while(temp!=NULL)
     {
                    printf("%d", temp->data);
                      temp=temp->link;
     }
     printf("NULL");
}
void create_list()
{
     int value;char ch;
     struct node *new_node=(struct node*)malloc(sizeof(struct node*));
      struct node *current=NULL;
    printf("before do\n");
     do{


    printf("enter the data \n");
    scanf("%d", &value);
    new_node->data=value;
    new_node->link=NULL;
     if(head==NULL)
     {
                   head=new_node;
                   current=new_node;
     }
     else
     {

      current->link=new_node;
      current=new_node;
      }                
     printf("do you want to create another  node \n");
     ch=getche();
     }while(ch=='Y');

}





int main()
{
    create_list();
    print();
   getchar();
     return 0;
}

输入和输出:

enter the data
2
do you want to create another  node 
Y
enter the data
3
do you want to create another  node 
Y
enter the data
4
do you want to create another  node 
Y
enter the data
5
do you want to create another  node 
N

55555555555555555555
55555555555555555555
55555555555555555555
55555555555555555555
55555555555555555555

2 个答案:

答案 0 :(得分:1)

您只创建一个节点:

struct node *new_node=(struct node*)malloc(sizeof(struct node*));

上面的行是在do..while循环之前。它应该在循环内。

答案 1 :(得分:1)

问题是您正在为同一节点添加值。通过您的程序,只有一个节点链接到同一节点。由于同样的原因while(temp!=NULL)失败。 temp->link指向同一temp。您获得相同的输出很多(无限)次。