我是C语言的新手,有一个问题。
如何检查链表是否为空?
我有一个结构体_node。
typedef struct _node{
int data;
struct _node *next;
}node;
如果我已经初始化了
node *list
,但没有对它做任何操作(即没有给list->data
赋值),我该如何检查它是否为空?我尝试了
if (node == NULL){break}
,但不起作用。谢谢帮忙!
我是C语言的新手,有一个问题。
如何检查链表是否为空?
我有一个结构体_node。
typedef struct _node{
int data;
struct _node *next;
}node;
node *list
,但没有对它做任何操作(即没有给list->data
赋值),我该如何检查它是否为空?if (node == NULL){break}
,但不起作用。简介:
通常有两种使用链表的方式:带根元素和不带根元素。
没有根元素时,当列表为空时,您的列表指针为NULL:
node *list;
...
if (list == NULL) { /* empty list */ }
有了root,就总是有一个元素。但它可以用两种方式:
一种是仅用于提供指向第一个元素的指针。
node *root;
...
if (root->next == NULL) { /* empty list */ }
或者让最后一个元素链接回根元素以形成循环。这个概念的优点是“下一个”元素永远不会是NULL,因此您不需要检查它。在这种情况下,如果根指向自身,则列表为空。
node *root;
...
if (root->next == root) { /* empty list */ }
答案:
根据您的描述,您已经分配了一个节点。这意味着您要使用“root”方法(第二或第三个示例)。但是,如果您想使用第一种变体,则不应分配节点,因为它不包含数据。
对于“root”方法,确实有一个(且仅有一个)不包含数据的节点。但是对于简单的链表,所有节点都必须包含数据。
我会简单地表达。
检查头指针 - 如果为NULL,则列表中没有条目。
int isEmpty( node * list )
{
if( !list )
return 1;
return 0;
}
return list == NULL ? 1 : 0;
;) - pzaengerreturn !list;
:-) - DarkDust但是你的问题实际上是关于 data
成员变量的。它总会有某种值存在。就像我说的,有时候 C 语言会为你将其设置为零,但有时候它会是不可预测的垃圾值(任何整数值都有可能)。在分配新节点时,你需要将其初始化为一个合理的默认值。例如,data
的有效值可能都大于零,因此你可以将 data
设置为零,以表示它当前为空。
你可以编写一个简单的循环来遍历你的链表并检查每个 data
成员,如果发现任何非零的 data
(或任何特殊值标志着它未使用),则返回 true。如果只找到默认的 data
或者链表长度为零,则应返回 false。
typedef struct _node{
int data;
struct _node *next;
}*node;
然后实例化
node list;
要检查链表是否为空,请使用以下方法:
if((list->next)==null)
{
break;
}