【发布时间】:2015-10-09 10:22:44
【问题描述】:
最近我正在学习 C++ 中的链接列表。 这是我的代码:
#include <iostream>
using namespace std;
class Node{
Node* next;
int num;
public:
Node(int num){
this->num = num;
}
void connect(Node* next){
this->next = next;
}
Node* next_node(){
return next;
}
void COUT(){
cout<<this->num<<endl;
}
};
void swap(Node* n1,Node* n2){
static Node* n = n1;
n1 = n2;
n2 = n;
}
class List{
Node* head;
Node* last;
public:
List(){
head = 0;
last = 0;
}
void insert(Node* n){
if(head==0){
head = n;
last = n;
}
else{
last->connect(n);
last = n;
}
}
void swap_head_last(){
swap(head,last);
}
};
int main()
{
List* LL = new List();
for(int i=0;i<10;i++){
LL->insert(new Node(i));
}
LL->swap_head_last();
return 0;
}
在我尝试创建“void swap_head_last()”之前没有错误。 我想在这个函数中做的是让指针“*head”指向这个列表的末尾,同时让指针“*last”指向这个列表的开头。
但是当我调用这个函数后尝试打印这两个指针的值时,我发现它仍然指向同一个对象。
我已经检查了这两页,
但是我想要的是改变这两个指针的方向而不是指针指向的对象的值。
我知道如果我修改这个函数如下:
void swap_head_last(){
static Node* n = head;
head = last;
last = n;
}
结果是正确的。
这个函数有什么问题?
【问题讨论】:
-
static Node* n = n1;只初始化一次,去掉static关键字 -
C++中的链表是
std::list<int> l。 -
@LightnessRacesinOrbit 也许吧,但仅仅使用现成的课程就没有什么教育意义了。
-
@skyking:我不同意。
-
@LightnessRacesinOrbit 欢迎您不同意,但是您仅使用
std::list<int>对链表有什么了解?您当然可以检查来源,但您可能更有可能从教科书中获得任何有用的信息并自行尝试。