gpt4 book ai didi

c - 反转链表顺序的功能...最后一个节点不链接到列表的其余部分

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:20 25 4
gpt4 key购买 nike

我在 C 中有以下节点结构:

#define SIZE 5 

typedef struct node
{
int n;
struct node* next;
}node;

node* head = NULL;

void implement(int n); // create linked list
int length(void); // returns length of list
node* reverse(void); // reverses order of list

列表实现如下:

void implement (int n)
{

for (int i = 0; i < n; i++)
{
node* new_node = malloc(sizeof(node));

if(new_node == NULL)
{
printf("out of memory!\n");
return;
}

new_node->n = i;
new_node->next = head;
head = new_node;

}
}

当打印到终端时给出:

4 3 2 1 0

头指针设置为节点 4。

我编写了以下函数来反转列表,如下所示:

node* reverse(void)
{

node* cur = head;
node* next = NULL;
head = NULL;

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



return cur;
}

然而,返回 cur 只会给出:

0

返回头提供:

1 2 3 4

所以很明显列表被颠倒了,但由于某种原因,最后一个节点 (0) 没有链接到其余节点。我可能在这里遗漏了一些明显的东西,但是任何人都可以给我任何指示吗? (没有双关语的意思!)

干杯

最佳答案

while (cur->next != NULL)

cur 位于最后一个元素时停止(nextNULL);即您不处理最后一个节点。

将其更改为

while (cur != NULL)

并返回 head 应该可以修复它。

关于c - 反转链表顺序的功能...最后一个节点不链接到列表的其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32467414/

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