这是我在C中的第一个链接列表程序,我试图初始化节点的值并尝试打印它.但是,它没有给我预期的输出.谁能让我知道我哪里错了?
#include<stdio.h>
#include<stdlib.h>
struct node
{
int key;
struct node *next;
};
typedef struct node NODE;
int main ()
{
NODE a,b,c;
NODE *list;
list=&a;
list->key = 10;
list->next = &b;
list->next->key=20;
list->next->next=&c;
list->next->next->key=30;
list->next->next->next=NULL;
printf("%d %d %d", a,b,c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它打印10和20之间有一些垃圾.
你真的不应该把整个结构(变量a,b和c)传递给printf()那样的,那甚至可以编译吗?
您想传递整数数据:
printf("%d %d %d\n", a.key, b.key, c.key);
Run Code Online (Sandbox Code Playgroud)
但当然这完全忽略了节点之间的联系.
在这种情况下,它会更像"有趣",例如:
static void print_list(const NODE *head)
{
const NODE *prev = NULL;
for(; head != NULL; prev = head, head = head->next)
printf("%d ", head->key);
puts(prev != NULL ? "\n" : "");
}
Run Code Online (Sandbox Code Playgroud)
然后main()在设置之后调用它list:
print_list(list); /* or print_list(&a); */
Run Code Online (Sandbox Code Playgroud)
您还可以简化链接列表的创建:
a.key = 10;
a.next = &b;
b.key = 20;
b.next = &c;
c.key = 30;
c.next = NULL;
list = &a;
Run Code Online (Sandbox Code Playgroud)
这更明显地使用了所有节点都可直接使用的事实,并且放弃了歇斯底里的链接跟踪.