2017-10-17 7 views
-4

リンクリストを逆にする関数を試してみたいです。 A somecodesを見上げたが、私は彼らのアルゴリズムを理解していない。どのようにしてこの現象が起こるのか誰でも説明できますか(intherative solution)?試してみましたが、うまくいきませんでした。1つのリンクリストを逆にする

現在のコード:

void rvrprint(struct node *go) 
{ 
    struct node *tmp; 
    struct node *onc=NULL; 

    struct node *snk; 
    tmp=go; 
    while(tmp!=NULL) 
    { 
     snk = tmp->next; 
     tmp->next=onc; 
     tmp=snk; 
     printf("%d\n",tmp->x); 
    } 
    head = tmp; 
} 
+1

いくつかのことを試しましたが、うまくいきませんでした。さて、あなたは何を試しましたか、どんなやり方でうまくいかなかったのですか? – klutt

+1

データ構造を指定する必要があります。また、変更が必要なものを他の人が指摘できるように、試行したソリューションを含める必要があります。 Stackoverflowは、手を空にして完全なソリューションを残すとコードを書くサービスではありません – grek40

+0

ええ、私はそれをアルゴリズムを説明したい、私のコードを書いていない。 – frogwine

答えて

1

あなたはスタックとして、シングルリンクリストを見ることができます。それをやり直すには、最初のノードを取り出して新しいリストに追加することが最も簡単な方法であることを間もに理解しておく必要があります(新しいノードにを押し込む)。次に、2番目のノードを取得し、新しいリストに追加します(再び新しいスタックにプッシュします)。

すでにこの後、最初の2つのノードの順序が逆になっているはずです。これは元のリスト全体を見て、そのノードを新しいリストに「プッシュ」し続けることで継続します。

enter image description here

をあなたと、あなたはあなたの自己を言う:

0

は、私はあなたがこれを実装しようとしていると思いますあなたのコードが動作していません!

まあ、あなたはループの中で重要な一歩を欠場しています。

あなたのコードと比較しながら上記の図を調べると、それを見つけることができます。ない場合は、BTW

:-)コメントをドロップします。これもNULLで間違っ

head = tmp; 

tempように見えます。

関連する問題