指针在不同函数中的行为不同。
我创建了一个C++程序,可以打印和反转一个链表。我不明白为什么指针在pprint()
函数中的行为与在reverse()
函数中的行为不同。请看下面的代码。
#include <iostream>
struct Node{
int data;
Node* next;
Node(int x):data(x),next(nullptr){};
Node():data(0),next(nullptr){};
Node(int x, Node* next): data(x),next(next){};
};
class LinkedList{
public:
void pprint(Node* head);
Node* reverse(Node* head);
};
Node* LinkedList::reverse(Node* head){
Node* curr = head;
Node* next = NULL;
Node* prev = NULL;
while(curr!=NULL){
next = curr->next;
curr->next = prev;
prev = curr;
curr= next;
}
return prev;
}
void LinkedList::pprint(Node* head){
Node* curr = head;
while(curr!=NULL){
std::cout<<curr->data<<std::endl;
curr = curr->next;
}
}
int main(){
Node* a = new Node();
Node* b = new Node();
Node* c = new Node();
a->data = 1;
b->data = 2;
c->data = 3;
c->next = NULL;
b->next = c;
a->next = b;
LinkedList LL;
LL.pprint(a);
std::cout<<""<<std::endl;
LL.pprint(LL.reverse(a));
std::cout<<""<<std::endl;
LL.pprint(a);
return 0;
}
我希望得到以下输出:
1
2
3
3
2
1
1
2
3
但是我得到了以下输出:
1
2
3
3
2
1
1
对于pprint()
函数,我传递head
指针作为输入,并将其分配给curr
变量。在函数结束时,head
值仍然指向a
。但在reverse()
函数中,a
值已成为头部。我该如何纠正这个问题?
1条答案
按热度按时间4ktjp1zp1#
您正确地反转了链表,但是在反转之后,您没有更新头指针以指向反转列表的新头。
试试这个: