c-打印链表没有输出



这是我为链表编写的代码。基本上,它只需要输入并打印它。在编译时,它不会给出错误,但也不会给出输出。我不明白这个代码出了什么问题?帮帮我。

#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 listn");
 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);
}

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

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);
}

实际上,它包含了许多错误。

重写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 %dn",node->data);
    node=node->next;

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

旧的insert()中也存在同样的错误。

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

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

if (node==NULL) 
 printf("Empty listn");

if (node==NULL) {
   printf("Empty listn");
   return;

}

有了这个新的insert(),main()将是:

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

我已经测试过,在这个修复之后,它是有效的。

相关内容

  • 没有找到相关文章