我正在尝试使用C基本创建链表。我编写了以下代码,该代码一直工作到第一个节点,但最终在第二个节点上失败。我认为问题是我试图在列表中显示由箭头( - >)分隔的节点值。我认为我的逻辑是正确的,但请纠正我。提前致谢
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct node
{
int number;
struct node *next;
};
typedef struct node NODE;
NODE *node1, *node2, *start, *save;
int main()
{
node1 = (NODE *)malloc(sizeof(NODE));
int i = 0;
start = NULL;
for(i = 0; i < 3; i++)
{
int inf;
printf("Enter node value:");
scanf("%d", &inf);
node1->number = inf;
node1->next = NULL;
if(start == NULL)
{
start = node1;
save = node1;
}
else
{
// save=start;
// start=node1;
// node1->next=save;
node1->next = start;
start = node1;
}
while(node1 != NULL)
{
printf("%d ->",node1->number);
node1 = node1->next;
}
}
return 0;
}
答案 0 :(得分:1)
问题是
malloc
(请阅读here了解原因)。scanf
调用是否成功。malloc
调用在你气馁之前,你做的事情正确:
typedef
将三个值迭代到链表中的非常简单示例如下所示:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int number;
struct node *next;
};
typedef struct node NODE;
int main()
{
NODE *head = NULL, *p;
int i = 0;
for(i = 0; i < 3; i++)
{
int inf;
printf("Enter node value:");
if (scanf("%d", &inf) == 1)
{
p = malloc(sizeof *p);
if (p != NULL)
{
p->number = inf;
p->next = head;
head = p;
}
else
{
perror("Failed to allocate new node");
return EXIT_FAILURE;
}
}
else
{
// failed to read data. break
break;
}
// report current linked list
printf("%d", p->number);
for (p=p->next; p; p = p->next)
printf(" -> %d", p->number);
fputc('\n', stdout);
}
// cleanup the linked list
while (head)
{
p = head;
head = head->next;
free(p);
}
head = NULL;
return 0;
}
<强>输入强>
在提示时输入值1 2 3
:
<强>输出强>
Enter node value:1
1
Enter node value:2
2 -> 1
Enter node value:3
3 -> 2 -> 1
祝你好运。
答案 1 :(得分:0)
您应该在malloc()
循环内使用for
。
因为它在外面,所以使用相同的内存。
答案 2 :(得分:0)
正如Vamsi所说,你应该使用malloc
将节点放在堆上。您通常也不应该投出malloc
的输出,这是不需要的。然后你就可以制作一个双向链表,你的prev
内也有一个struct
指针。