我正在用指针实现一个链表。
我需要反转链表,所以我写了 rotate(List &l)
但我没有得到我期望的结果。
由于输入是
0 1 2 3 4 5 6 7 8 9
我会期望
9 8 7 6 5 4 3 2 1 0
结果,但我得到
0 9 8 7 6 5 4 3 2 1
既然我找不到我做错了什么,你能指出我做错了什么吗?问题似乎从这里开始:(旋转)
while(end->next !=0){
end = end->next;
}
我到那里第一个节点是最后一个节点(因为 cout << end->d; 给我0而不是9)
#include<iostream>
using namespace std;
typedef class Node *List;
struct Node{
int d;
List next;
};
//update : renamed
void reverse(List &l){
/*
start :
a b c d e
b c d e **a**
c d e **b** a
d e **c** b a
Result:
e **d** c b a
*/
// get last node
List end = l;
while(end->next !=0){
end = end->next;
}
//insert first node directly after the original last node
while(l!=end){
List hulp = l;
l = hulp->next;
hulp->next = end->next;
end->next=hulp;
}
}
int main(){
List l = new Node();
int i = 0;
List k = l;
while (i < 10)
{
k->d = i;
k->next = new Node();
k = k->next;
i++;
}
List m = l;
while ( m->next !=0 )
{
cout << m->d << endl;
m = m->next;
}
reverse(l);
m = l;
while ( m->next !=0 )
{
cout << m->d << endl;
m = m->next;
}
}