这是我为链表编写的代码。基本上它只需要输入并打印它。在编译时它没有错误,但也没有输出。我没有得到这个代码有什么问题?帮助我。
#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);
}
答案 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);
}
我测试过,在此修复之后,它可以正常工作。