gpt4 book ai didi

c - b->next->next 在链表中给出错误

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

这两行给出错误 - 取消引用指向不兼容类型的指针。

while(b->下一个!=NULL ||b->下一个->下一个!=NULL)

b=b->下一个->下一个;

完整代码如下

typedef struct NODE
{
int data;
struct node *next;
}node;

void middle(node **head)
{
struct NODE *a = *head;
struct NODE *b = *head;

if(*head==NULL)
{
printf("List Empty\n");
return;
}
while(b->next!=NULL ||b->next->next!=NULL)
{
a=a->next;
b=b->next->next;
}
printf("MID = %d\n", a->data);
}


void find_len(node *head, int n)
{
node *temp = head;
if(temp==NULL)
{
printf("Length = %d\n", n);
return;
}
else
find_len(temp->next, ++n);
}

ma​​in() 中的函数调用

middle(&head);

最佳答案

struct NODE的声明中,对struct node的引用未定义。像这样写:

typedef struct NODE {
int data;
struct NODE *next;
} node;

此循环条件不正确:

while (b->next!=NULL || b->next->next!=NULL)

您只想在两项都不为空时推进循环:

while (b->next != NULL && b->next->next != NULL)

最后,*head==NULL 条件永远不会为真。这是因为您不能拥有指向 NULL 的指针。因此,如果列表为空,head 本身将为 NULL。所以你需要稍微重写函数的开头,小心避免空指针取消引用,例如:

node *a, *b;

if (head == NULL)
{
puts("List Empty");
return;
}

a = b = *head;

我还将 printf 更改为 puts。当您不需要格式化字符串时,并且只想使用尾随换行符进行打印,puts 更简单。

关于c - b->next->next 在链表中给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42750779/

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