C ++ / Cは、単一リンクリストの反転を再帰的に実現します

//

//

 

#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;

//単一リンクリストを作成します

    forint 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 ;

    リバース(ヘッド);

}

 

 

おすすめ

転載: blog.csdn.net/qq_39429779/article/details/109017139