gpt4 book ai didi

c - 在C中反转链表,代码麻烦

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

我尝试在 c 中反转一个简单的链表(包含 0、1、2、3...9),但我的代码无法完全运行。关于我做错了什么有什么想法吗?

我很确定我的反向函数是正确的,我遇到的主要问题是弄清楚将什么放入反向()函数的参数中。这个程序非常接近运行,它可以编译,但不会打印反向列表,所以我不确定我做错了什么。有人可以提供的任何帮助将不胜感激! :)

代码:

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

struct node;
typedef struct node Node;

struct node
{
int data;
Node* next;
};

void reverse(Node* *);

int main(int argc, char* argv[])
{
Node* head = NULL;
int i;
Node* temp;

//set up a test list with values 9->8->7->...->0
for (i = 0; i < 10; i++)
{
temp = (Node*)malloc(sizeof(Node));
if (temp == NULL)
{
printf("out of memory?\n");
exit(1);
}
temp->data = i;
temp->next = head;
head = temp;
}

reverse(head);

//print the reversed list.
temp = head;
while (temp != NULL)
{
printf("%d\n", temp->data);
temp = temp->next;
}

return 0;
}

void reverse(Node* *head)
{
Node* pre = NULL;
Node* cur = NULL;
Node* nex = NULL;

pre = cur = nex = *head;
pre = pre->next->next;
cur = cur->next;
nex->next = NULL;
cur->next = nex;

while(pre != NULL)
{
nex = cur;
cur = pre;
pre = pre->next;
cur->next = nex;
}

*head = pre;

}

最佳答案

事实上,您的 reverse() 函数不正确。它总是将 *head 分配给 NULL。永远。

while(pre != NULL)
{
nex = cur;
cur = pre;
pre = pre->next;
cur->next = nex;
}

终止此循环的唯一方法是如果 preNULL。然后你用它来分配给 *head:

*head = pre;

所以你的结果将始终是一个空列表。尝试将其设置为 cur

此外,您的函数不适用于空列表或单条目列表。正如注释所指出的,您需要传递头指针的地址 - reverse(&head)

关于c - 在C中反转链表,代码麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52767873/

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