打印链表没有输出

时间:2013-07-08 06:10:49

标签: c linked-list

这是我为链表编写的代码。基本上它只需要输入并打印它。在编译时它没有错误,但也没有输出。我没有得到这个代码有什么问题?帮助我。

#include<stdio.h>

struct list {
  int data;
  struct list* next;
};

insert(struct list* node, int data)
{
  node = malloc(sizeof(struct list*));
  if (node == NULL)
    node = data;
  else   
    node->data = data;
    node->next = NULL;
 return node;
}

printlist(struct list* node)
{
 if (node == NULL) 
   printf("Empty list\n");
 while(node->next != NULL)
   printf("the list contains %d", node->data);
   node = node->next;
}

main()
{
  struct list* NODE;
  NODE = malloc(sizeof(struct list*));
  insert(NODE, 3);
  insert(NODE, 5);
  printlist(NODE);
}

2 个答案:

答案 0 :(得分:2)

这是因为你没有保留节点的指针,也删除了*

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

尝试类似:

struct list *   insert(struct list* node ,int data)
    {
      struct list * new_elem = malloc(sizeof(*new_elem)); //check !=NULL
       new_elem->data = data;
       new_elem->next = NULL;
       if (node != NULL)
          node->next = new_elem;
     return (new_elem);
}

答案 1 :(得分:1)

实际上,它包含很多错误。

重写insert():

struct list* insert(struct list* node ,int data) //need the type of return value 
{
    struct list* newnode;
    newnode=malloc(sizeof(struct list)); //get rid of '*'
    //how to insert to a link list? I suggest you make it understand.
    //in this code, I insert an element in the head.
    newnode->data = data;
    //if (node==NULL)
    //    newnode->next = NULL;
    //else 
    //    newnode->next=node;
    //the code above equals:
    newnode->next = node;
    return newnode;
}

并且在printlist()中,你不能将一些代码用空格而不是“;” ,也就是说,改变

 while(node!=NULL) 
    printf("the list contains %d\n",node->data);
    node=node->next;

while(node!=NULL) {
    printf("the list contains %d\n",node->data);
    node=node->next;
}

旧插入()中存在同样的错误。

没有printlist()返回值类型的althoght,可以编译,但我建议添加一个,如void

此外,对于空列表,您需要更改:

if (node==NULL) 
 printf("Empty list\n");

if (node==NULL) {
   printf("Empty list\n");
   return;

}

使用这个新的insert(),main()将是:

main()
{
    struct list* NODE = NULL;
    NODE = insert(NODE,3);
    NODE = insert(NODE,5);
    printlist(NODE);
}

我测试过,在此修复之后,它可以正常工作。