2014-09-06 46 views
0

我正在研究數據結構,我必須自己做一個雙鏈表,創建Node和List對象而不是使用Java實現LikedList,並且出現堆棧溢出錯誤每次我試圖在列表中添加2個元素,我不知道爲什麼。你可以幫我嗎?運行列表時堆棧溢出錯誤

public class DoubleLinked { 
    Node head; 
    Node tail; 
    int size; 

    public DoubleLinked() { 
     head = tail = null; 
     size = 0; 
    } 

    public void insertOnHead(int x) { 
     Node newNode = new Node(); 
     newNode.value = x; 
     if(head == null) { 
      head = newNode; 
      size++; 
     } else { 
      newNode.next = head; 
      head.previous = newNode; 
      head = newNode; 
      size++; 
     } 
    } 

    @Override 
    public String toString() { 
     return "[Head: " + head + ", Tail: " + tail + ", Size: " 
       + size + "]"; 
    } 
} 


public class Node { 

    int value; 
    Node next; 
    Node previous; 

    @Override 
    public String toString() { 
     return "Node [Value: " + value + ", Next: " + next + ", Previous: " + previous + "]"; 
    } 
} 

它插入所述第一元件(5)而不是第二(6)。

主營:

public class DEMain 
{ 
    public static void main(String[] args) 

    { 
     DoubleLinked l1 = new DoubleLinked(); 

     l1.insertOnHead(5); 
     l1.insertOnHead(6); 
     System.out.println(l1); 

    } 
} 

堆棧跟蹤:

Exception in thread "main" java.lang.StackOverflowError at 
java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:63) 
at java.lang.StringBuilder.<init>(StringBuilder.java:109) 
at DoblementeEnlazadas.Nodo.toString(Nodo.java:12) 
at java.lang.String.valueOf(String.java:2854) 
at java.lang.StringBuilder.append(StringBuilder.java:128) 
at DoblementeEnlazadas.Nodo.toString(Nodo.java:12) 
+1

第一步是讀取和發佈異常堆棧跟蹤。它告訴你和我們,問題在哪裏。 – 2014-09-06 20:52:29

+0

此外,請提供您進行測試的代碼。目前,這段代碼不應該給出StackOverflowError(即使它不能按預期工作)。 – 2014-09-06 20:54:06

+0

請不要在註釋中放置代碼和堆棧跟蹤。把它們放在問題本身,使它們清晰可辨。 – 2014-09-06 21:01:17

回答

5

的異常堆棧跟蹤會確​​認,但問題是相當明顯的:

public String toString() { 
    return "Node [Value: " + value + ", Next: " + next + ", Previous: " + previous + "]"; 
} 

所以,當你變換一個節點轉換爲一個字符串,你也可以轉換它的兩個鄰居。這導致它們的toString()方法被調用,它們轉換它們的2個鄰居,這導致它們的toString()方法被調用,它們變換它們的2個鄰居等等。

+0

好吧,我明白了,但我用它來打印一個LinkedList,它運行完美,我該如何做到這一點,然後使其工作。 – 2014-09-06 21:01:23

+0

提示:這是什麼 - >下一個 - >上一個? (糟糕!Java,我忘了)什麼是this.next.prev? – 2014-09-06 21:03:02

+0

+1:堆棧跟蹤確實證實了這一點。 – 2014-09-06 21:03:44