2017-01-25 11 views
0

私は最初のリンクされたリストを作成しています。二重リンクされたリストは実際には逆方向に向いていると理解していますが、現在のノードをSINGLYリンクリストの1つのノードによってリストの後方に移動するメソッドを作成しようとしています。単独リンクされたリストで後方に移動しますか?

//Paramaterized construct 
    public ListNode(int aData, ListNode aLink) { 
    this.data= aData; 
    this.link = aLink; 
    } 
} 
private ListNode head; //First element 
private ListNode current; //Current node of interest 
private ListNode previous; //Node behind current 

public void goToNext() { 
    previous = current; 
    current = current.link; 
} 
//TODO: Fix previous 
public void goToPrev() { 
    if (current != head) { 
    } 
    else 
    System.out.println("Current node is the head, sorry"); 

私は私のプライベートListNodeクラスを追加するのを忘れ:

private class ListNode 
{ 
    private int data; 
    private ListNode link; 
    //Default construct 
    public ListNode() 
    { 
     this.data = data; 
     this.link = link; 
    } 
    //Paramaterized construct 
    public ListNode(int aData, ListNode aLink) 
    { 
     this.data= aData; 
     this.link = aLink; 
    } 
} 

私はここで

は、私がこれまでのところ、私は参照してコンストラクタのための次に私の行くを含めましてしまったものです私が現在のノードと等しいノードnextを見つけるまで、リストの最初から繰り返さなければならないと思っています。しかし、私はどのように正確にそのループを設定し、正しい体を持っているか分からない。

+0

「head」の前には何がありますか? –

+0

@DavidChoweller私の場合、「フォロワー」は前のもので、リーダーとは何ですか?現在?私はフォロワーがここにいるのか少し不明です –

答えて

1

これを行うには、2つのポインタでリストを反復処理する必要があります。そのトリックは、まったく1つのノードによってもう一方のノードを先行させることです。ポインタ#1が関心のあるノードを見つけると、ポインタ#2はリストの後ろにあるノードであり、#2にアクセスすることによって「後退」することができます。

+1

あるいは、ただ一つのポインタ 'p'で作業し、' p.link == current'をチェックしてください。 – Henry

+0

@Henry 1つのポインタが2つより簡単だと聞きました。私は好奇心を持っています。 –

+0

@ChrisM私は完全な解決策をあきらめたくありませんが、前のコメントで述べた条件が真であれば、 ? – Henry

0

単一リンクリストを逆方向に反復することはできません。逆方向に反復したい場合は、リストを二重にリンクする必要があります。または、これを繰り返す前にノードのrefを取ることができます。

関連する問題