如何检查链表是否为空

hel*_*ded 4 c linked-list

我是 C 新手,有一个问题。

如何检查链表是否为空?

我有一个结构 _node

typedef struct _node{
    int data;
    struct _node *next;
}node;
Run Code Online (Sandbox Code Playgroud)

如果我已经初始化node *list,但没有对它做任何事情(即没有赋值list->data),我将如何检查它是否为空?

我试过if (node == NULL){break}但没有用。

谢谢您的帮助!

Dar*_*ust 6

介绍:

通常有两种使用链表的方法:使用根元素和不使用。

如果没有根,当列表为空时,您的列表指针为 NULL:

node *list;
...
if (list == NULL) { /* empty list */ }
Run Code Online (Sandbox Code Playgroud)

对于 root,总是有一个元素。但它可以通过两种方式使用:

要么只是提供指向第一个元素的指针。

node *root;
...
if (root->next == NULL) { /* empty list */ }
Run Code Online (Sandbox Code Playgroud)

或者让最后一个元素链接回根以形成一个循环。这个概念的优点是“下一个”元素永远不会为 NULL,因此您不需要检查它。在这种情况下,如果根指向自身,则列表为空。

node *root;
...
if (root->next == root) { /* empty list */ }
Run Code Online (Sandbox Code Playgroud)

回答:

现在,根据您的描述,您已经分配了一个节点。这要么意味着您想要“根”方法(第二个或第三个示例)。但是如果你想使用第一个变体,你不能分配节点,因为它不保存数据。

对于“根”方法,您确实有一个(并且只有一个)节点不保存数据。但是对于简单的链表,所有节点都必须包含数据。