2016-10-04 119 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