2016-04-17 6 views
2

私はプログラミングの初心者です。リンクされたリストの逆関数Javaの機能

Node reverse(Node node) { 
    Node prev = null; 
    Node current = node; 
    Node next = null; 

    while (current != null) { 
     next = current.next; 
     current.next = prev; 

     prev = current; 
     current = next; 
    } 

    node = prev; 
    return node; 
} 

whileループで何が起こっているのか正確に知りたいだけです。

ありがとうございます。

+1

の可能性のある重複した[リンクリストのデータ構造のコードの反転に必要なビジュアル解説ガイダンス?](http://stackoverflow.com/questions/1482189/visual-explanation-guidance-needed-for-reversal- of-linked-list-datastructure-cod) –

+0

codereviewで尋ねられませんか? –

+2

@TamasHegedusは、Code Reviewのコードの仕組みを解説しています。そこの[トピック上のページ](http://codereview.stackexchange.com/help/on-topic)を参照してください。 – Phrancis

答えて

0

リスト内の各ノードについて、次のポインタを前のノードを指すように変更しています。

例えば、このリンクリストを取っている:

A-> B->

Cとにそれを変更する:

< -b < -c

+0

downvoteの理由を教えてください。より良い答えをあなた自身で提供してください。 – Murray

+1

著者は、おそらく*関数の動作を知っていますが、どのように*動作しているかわかりません。 –

1

を基本的にはリンクされを逆転しようとしますリストご存知のように、Nodeには、nextprevの2つのポインタがあります。リンクリストを逆転するために、我々は中Node 3を想像例えばので

enter image description here

(私たちは赤チェーンに青色のチェーンを変更したい)あなたは下の画像に表示できるように、これらのポインタを変更する必要があります画像は、そのprevフィールドが指していたもの(Node 2)は、Node 3の次のノード(私たちの望む赤い鎖)になるので、current.next = prev;(2行目)は意味があります。しかし、ループの次の反復でNode 4に到達する前に、next = current.next;(行1)を書き込んでNode 3の次のポインタを保存します。Node 4を指し、最後に各繰り返しの最後に配置しますcurrent = next;(行4)を使用してそれを戻して、次にNodeに繰り返します。
次の繰り返しで同じことをする必要がありますので、prevNode 3を指す必要があります。そのため、prev = current;(行3)を用意してprevとしました。

Picture reference

関連する問題