ポインターを使用してリンクされたリストを実装しています。
リンクされたリストを逆にする必要があるので、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; は 9 ではなく me0 を返すため)
#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;
}
}