2016-10-04 13 views
0

アルファベットの各文字の値を保持するノードを含む円二重リンクリストを作成して印刷しようとしました。ここでJavaの円二重リンクリストにノードを追加

は、これまでの私のコードです:

CircularDoublyList.java

public static void main(String[] args) 
{ 
    CDLL<Character> head = null; 
    CDLL<Character> tail = null; 

    CDLL <Character> p = null; 
    for(char c = 'A'; c <= 'Z'; c++) { 
     p = new CDLL<Character>(c, null, null);   
     if (head == null) 
     { 
      p.setNext(p); 
      p.setPrevious(p); 
      head = p; 
      tail = head; 
     } 
     else 
     { 
      p.setPrevious(tail); 
      tail.setNext(p); 
      head.setPrevious(p); 
      p.setNext(head); 
      head = p;  
     } 
    } 

    print(p); 
} 

public static void print(CDLL<Character> list) { 
    String str = ""; 
    while(list != null) { 
     str += list.getPrevious().getValue() + " ";   
     list = list.getPrevious(); 
    } 
    System.out.print(str); 
} 

問題:私はリストを印刷しようとしましたが、何も現れていないようにみえとエラーが自分のしているんメッセージをコンソールに表示します。どんな助けもありがとう。

+0

あなたは[MCVE]それはあなたの問題を示して提供する必要があります。このコードは不完全で長すぎます。 –

+0

これは最初にデバッガでこれを実行し、まだ立ち往生している場合にのみここに来て、デバッガがあなたに何を伝えているか**表示して教えてくれます。 –

答えて

2

まあ、リストが円形であるので、コード:

while(list != null) { 
    str += list.getPrevious().getValue() + " ";   
    list = list.getPrevious(); 
} 

はサークルで行き続け、停止することはありません。

ちょうどそれが再び最初のノードを見つけたときに停止するためにあなたの方法を変更します。

public static void print(CDLL<Character> list) { 
    String str = ""; 
    CDLL<Character> first = null; 
    while (true) { 
    str += list.getPrevious().getValue() + " "; 
    if (first == null) 
     first = list.getPrevious(); 
    else if (first == list.getPrevious()) 
     break; 
    list = list.getPrevious(); 
    } 
    System.out.print(str); 
} 
+0

長い夜だった...ありがとう。 – NotToBrag

関連する問題