リンクされたリストを逆にする反復的および再帰的な方法を書きたいと思います。
残念ながら、どちらの場合も同様の問題が発生しています。1 つのノードのポインターを別のノードに変更することができず、場合によってはリストを繰り返し処理するのに苦労しています。たとえば、これが私の再帰的逆関数です。
node *reverse(node *initial){
node *prev = initial;
node *nextNode;
nextNode = (node *)malloc(sizeof(struct node));
nextNode = initial->next;
if(nextNode->next == NULL){
return prev;
}
else{
nextNode = reverse(nextNode);
nextNode->next = prev;
}
}
行nextNode = initial->next;
はプログラムをクラッシュさせます。このコードには他にも多くの問題があると確信しています。致命的な欠陥がある場合は提案を受け付けていますが、ほとんどの場合、このエラーを解決して残りを自分でデバッグできるようにしたいと考えています。反復バージョンで、プログラムをクラッシュさせる同様の行のいくつかは次のとおりです。
startA = startA->next; // startA is a node pointer
backNode = startB; // backNode and startB are both node pointers
backNode->data = frontNode->data; //both ints
frontNode->data = temp; //again both ints
リクエストに応じて、コードの残りの部分:
main(){
node * start = buildList();
int i;
int nodeSize = sizeof(struct node);
reverse(start);
}
そしてbuildList:
node *buildList(){
node *head = NULL;
node *second = NULL;
node *third = NULL;
node *fourth = NULL;
node *fifth = NULL;
head = (node *)malloc(sizeof(struct node));
second = (node *)malloc(sizeof(struct node));
third = (node *)malloc(sizeof(struct node));
fourth = (node *)malloc(sizeof(struct node));
fifth = (node *)malloc(sizeof(struct node));
head->data = 1;
head->next = second;
second->data =2;
second->next = third;
third->data = 3;
third->next = fourth;
fourth->data =4;
fourth->next = fifth;
fifth->data = 5;
fifth->next = NULL;
return head;
}