-1

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

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

2 回答 2

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);
}
于 2013-07-08T06:15:15.767 回答
1

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

重写插入():

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

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

尽管没有 printlist() 的返回值类型,它可以编译,但我建议添加一个,如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);
}

我已经测试过,在这个修复之后,它可以工作。

于 2013-07-08T06:25:55.020 回答