//
//
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
intデータ;
ノード*次;
}ノード;
void reverse(Node * head);
ノード* new_head;
int count = 0;
int main(){
ノード* p =(ノード*)malloc(sizeof(ノード));
ノード* head = p;
//単一リンクリストを作成します
for(int i = 1; i <10; ++ i){
ノード* q =(ノード*)malloc(sizeof(ノード));
q->データ= i;
p-> next = q;
p = p-> next;
}
p =頭;
//この単一リンクリストを出力します
while(p!= NULL){
printf( "%d"、p-> data);
p = p-> next;
}
printf( "\ n");
//再帰関数を呼び出す
リバース(ヘッド);
p = new_head;
//反転後にリンクリストを出力します
while(p!= NULL){
printf( "%d"、p-> data);
p = p-> next;
}
printf( "\ n");
// printf( "%d"、count);
0を返します。
}
/ *
関数を逆にすると、pqはリンクリストの最後までトラバースし、最後のノードの次のノードを前のノードに変更してから、再帰を繰り返します。
* /
void reverse(Node * head){
カウント+ = 1;
ノード* p、* q;
//トラバーサル
p =頭;
if(p-> next == NULL){
戻る;
}
q = p-> next;
while(q-> next!= NULL){
p = q;
q = p-> next;
}
//逆行する
q-> next = p;
if(count == 1){
//反転後、最後のノードがヘッドノードになります
new_head = q;
}
p-> next = NULL ;
リバース(ヘッド);
}