gpt4 book ai didi

在 C 中检查链表是否为空

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:41 27 4
gpt4 key购买 nike

我有一个简单的链表(分配给我的),我试图检查它是否为空(它没有头节点),但我的实现似乎不起作用。

我有 .c 文件:

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

int main(void) {
List * node;
node = NULL;

node = malloc(sizeof(List));

addToList(node);
return 0;
}

void addToList(List * node) {
if(node == NULL) {
node->value = 3;
node->next = NULL;
}
else {
//add to end of the list:

List * temp = malloc(sizeof(List));
temp->value = 4;

while(node->next != NULL)
node = node->next;

node->next = temp;
temp->next = NULL;
}

}

结构体中的链表(在.h文件中)

typedef struct List {
int value;
List * next;
}List;

然而,if 语句永远不会执行,即使列表是空的。我得到的结构没有头节点(我无法更改它),那么我该如何解决这个问题?

如有任何帮助,我们将不胜感激。

最佳答案

问题出在addToList

node == NULL

应该是

node->next == NULL

那么您还需要确保没有为该函数提供空指针。目前您正在提供一个有效的函数指针,因此它永远不会 == NULL

参见:

node = malloc(sizeof(List));
addToList(node);

这里的节点被分配了一个指向列表的指针并提供给addToList。

我怀疑您真正要查找的内容根本不包括 if/else,应该看起来像这样(注意:您必须在调用此函数之前手动初始化您的列表节点。 malloc 只是给你一个指向垃圾的指针)。

    //add to end of the list:       
void addToList(List *node) {
if (node == NULL)
return;
List * temp = malloc(sizeof(List));
temp->value = 4;

while(node->next != NULL)
node = node->next;

node->next = temp;
temp->next = NULL;
}

关于在 C 中检查链表是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34969717/

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