我是第一次学习链表,我有以下代码:
#include <stdio.h>
#define null 0
struct List_item {
int item_num;
struct List_item* next;
};
void main() {
struct List_item head = {null};
struct List_item i1 = {1, null};
struct List_item i2 = {2, null};
struct List_item i3 = {3, null};
struct List_item i4 = {4, null};
head.next = &i1;
i1.next = &i2;
i2.next = &i3;
i3.next = &i4;
// Go through the list and print the numbers in the order of the list
struct List_item* current = &head;
while (current != null) {
printf("%d-", current->item_num);
current = current->next;
}
printf("\n");
}
输出为:0-1-2-3-4-
我该如何制作才能使输出变为:1-2-3-4-?
我想,由于 while 循环仅在 current != null 时打印,因此它不会打印初始的 0。显然情况并非如此。
对于上下文,我正在尝试为另一个带有链表的程序学习这一点,我需要编写其中头节点为空的代码,直到创建一个新节点。但是,我不希望它打印空头节点。
对于缺乏清晰度表示歉意。任何建议都会有很大帮助。
谢谢
你定义的方式
head
,它不是一个指向列表项的指针;它是一个列表项。
然后通过设置
current
指向此列表项来开始循环:struct List_item* current = &head;
。
如果您不想将
head
视为列表项,请将其定义为指向列表项的指针:
struct List_item *head = NULL;
并将其设置为指向列表中的第一项:
head = &i1;
并使用
head
初始化 current
以指向列表中的第一项来启动循环:
struct List_item *current = head;
请勿创建您自己的
null
定义。使用 #include <stddef.h>
获取一些 C 事物的标准定义并使用 NULL
。