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