Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 打印链表时没有输出_C_Linked List - Fatal编程技术网

C 打印链表时没有输出

C 打印链表时没有输出,c,linked-list,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 = da

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

#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);
}
#包括
结构列表{
int数据;
结构列表*下一步;
};
插入(结构列表*节点,整数数据)
{
node=malloc(sizeof(struct list*));
if(node==NULL)
节点=数据;
其他的
节点->数据=数据;
节点->下一步=空;
返回节点;
}
打印列表(结构列表*节点)
{
if(node==NULL)
printf(“空列表”);
while(节点->下一步!=NULL)
printf(“列表包含%d”,节点->数据);
节点=节点->下一步;
}
main()
{
结构列表*节点;
NODE=malloc(sizeof(struct list*));
插入(节点,3);
插入(节点,5);
打印列表(节点);
}

这是因为在保留节点指针时,没有保留节点指针,同时也删除了
*

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():

在printlist()中,不能将某些代码用空格而不是“;”,也就是说,更改

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

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

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

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

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

}

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


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

+1您指出的第一个错误也出现在main()中,第二个
node=data;//不兼容的类型
insert()
函数中(同时添加这2个点),我的答案不完整,因此删除。是,它现在工作:)thnks@user2456752好吧,还有一个bug,我在下面编辑过,它的开头是“另外,对于空列表,您需要更改…”@user2456752,对于
malloc()
,您可能需要一个
#include
while(node!=NULL) {
    printf("the list contains %d\n",node->data);
    node=node->next;
}
if (node==NULL) 
 printf("Empty list\n");
if (node==NULL) {
   printf("Empty list\n");
   return;
main()
{
    struct list* NODE = NULL;
    NODE = insert(NODE,3);
    NODE = insert(NODE,5);
    printlist(NODE);
}