如何删除这个链表中初始的空打印

问题描述 投票:0回答:1

我是第一次学习链表,我有以下代码:

#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。显然情况并非如此。

对于上下文,我正在尝试为另一个带有链表的程序学习这一点,我需要编写其中头节点为空的代码,直到创建一个新节点。但是,我不希望它打印空头节点。

对于缺乏清晰度表示歉意。任何建议都会有很大帮助。

谢谢

c struct linked-list
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.