C++ 指针有点问题吗

C++ 指针有点问题吗,c++,pointers,C++,Pointers,下面的命令用于反转链接列表。它似乎一直工作到最后一行。当我调试时,“当前”和“结果”都属于同一类型(节点*),而“结果”是颠倒的列表。但当函数完成时,current仅具有“result”列表的第一个值。有人知道为什么函数完成时“当前”不是完整列表吗 struct Node { int data; Node* next; }; void reverseList(Node** head) { Node* current = *head; Node* result = N

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

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;
}

您需要在算法结束时更新头部:

current = result;
*head = current;

您需要在算法结束时更新头部:

current = result;
*head = current;

显示的逻辑存在多个问题

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

第二个观察结果是,该函数接受一个参数,即指向head节点的指针,并返回一个
void

从这一点,我们得出结论,函数应该更新
head
节点,但代码中没有这样做的内容

此外,这个函数没有理由使用这样的双指针,指向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;
}

就是这样。

显示的逻辑存在多个问题

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

第二个观察结果是,该函数接受一个参数,即指向head节点的指针,并返回一个
void

从这一点,我们得出结论,函数应该更新
head
节点,但代码中没有这样做的内容

此外,这个函数没有理由使用这样的双指针,指向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;
}

就是这样。

什么是“原创”?什么是“原创”?或者只是
*head=result*head=result