gpt4 book ai didi

c++ - 指针有点问题

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

下面的意思是反转链表。它似乎一直工作到最后一行。当我调试时,“当前”和“结果”都是同一类型 (Node*),而“结果”是颠倒的列表。但是当函数完成时,current 只有“result”列表的第一个值。有人知道为什么函数完成时“current”不是完整列表吗?

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

void reverseList(Node** head)
{
Node* current = *head;
Node* result = NULL;

while (current != NULL)
{
Node* temp = current;
current = temp->next;
temp->next = result;
result = temp;
}

current = result;
}

最佳答案

显示的逻辑存在多个问题。

我们可以从明显的观察开始,即 reverseList 的目标显然是反转单链表。

第二个观察是该函数采用单个参数,即指向头节点的指针,并返回一个 void

据此我们得出结论,该函数应该更新 head 节点,但代码中没有任何内容可以这样做。

此外,这个函数真的没有理由采用这样的双指针,一个指向头节点的指针,并更新它。该函数采用指向列表第一个元素的普通指针,现有的 head 指针,然后返回反转列表的 head 指针要简单得多。

通过这个简单的更改,生成的逻辑变得更短、更简单:

Node *reverseList(Node *head)
{
Node *current=NULL;

while (head)
{
Node *next=head->next;

head->next=current;
current=head;

head=next;
}
return current;
}

就是这样。

关于c++ - 指针有点问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39431103/

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