gpt4 book ai didi

c - C语言中如何判断链表是否为空

转载 作者:行者123 更新时间:2023-11-30 14:50:25 25 4
gpt4 key购买 nike

我有这个代码:我尝试初始化一个指针,然后使用它来检查我的列表是否为空

#include <stdio.h>
#include <stdlib.h>

typedef long T;

typedef struct SortedList {
T value;
struct SortedList* next;
} SortedList;

void init(SortedList** list)
{
list = (SortedList **) malloc (sizeof(SortedList*));
list=NULL;
printf("%p\n", list);
}
void isEmpty(SortedList** list)
{
printf("%p\n", list);
if(list == NULL) printf("List is empty\n");
}
int main()
{
SortedList **list;
init(list);
printf("Initialization with succes\n");
isEmpty(list);

return 0;
}

但是我得到这个输出,但我不明白为什么:

(nil)
Initialization with succes
0x2

最佳答案

首先你不需要双指针。使用NULL 进行初始化在这里很重要。 (表示空列表)。

SortedList *list = NULL;

这样做的好处是,现在如果您想对其进行更改,请传递它的地址。

func(&list);

检查空列表将是

   void func(SortedList **list){
if( *list == NULL )
/* empty */
}

这通常是列表的实现方式。

<小时/>

在您的情况下,您只是分配给局部变量,而不是返回内存地址,而是用 NULL 覆盖了指针的值 - 代码中存在内存泄漏。

使用您的代码,它将是 like 。是的,初始化所做的就是将其分配给NULL。这是检查 NULL 的一种简单方法。一开始就将其设为NULL基本上表示列表为空。(通常是这种情况)。

关于c - C语言中如何判断链表是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48997202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com