我是 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}但没有用。
谢谢您的帮助!
介绍:
通常有两种使用链表的方法:使用根元素和不使用。
如果没有根,当列表为空时,您的列表指针为 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)
回答:
现在,根据您的描述,您已经分配了一个节点。这要么意味着您想要“根”方法(第二个或第三个示例)。但是如果你想使用第一个变体,你不能分配节点,因为它不保存数据。
对于“根”方法,您确实有一个(并且只有一个)节点不保存数据。但是对于简单的链表,所有节点都必须包含数据。