簡體   English   中英

鏈表中的java.lang.StackOverflowError?

[英]java.lang.StackOverflowError in Linked List?

我使用BlueJay作為我的IDE。 我的目標是創建一種方法,該方法從頭開始以單行打印列表中的每個值,並以三個空格隔開。

到目前為止,我所掌握的一切都不會在BlueJ中產生語法錯誤:

public String toString(E val) {
         Node<E> node = head;
        Node<E> newNode= new Node<E>(val);
         String str = " ";
         if (!isEmpty()) {
         newNode.next = head;
         head= newNode;
        while ((head!= null)){
            str += toString(head.val);
            str += toString(head.val) + " " + " " + "  ";
           newNode = newNode.next;

        }
        return str;

        }

但是,當我嘗試使用“檢查”在Blue J中測試我的代碼並對其進行更改后,我輸入了一個字符串。 我只是得到“空格”,而不是我用三個空格鍵入的字符串。 我覺得這與

 my str = toString(head.val);
            str += toString(head.val) + " " + " " + "  ";

我試圖連接字符串,但是沒有用。 有什么建議可以幫助消除此錯誤?

正如評論中的人們所說,您永遠不會在while循環中改變head 查看您的情況: head!= null 假設這最初是正確的(因此循環開始運行),除非您在循環內更改head ,否則其狀態將永遠不會改變,因此循環條件的結果將不會改變,因此循環將永遠不會終止。 此無限循環包含對您的函數的遞歸調用,因此您的堆棧溢出異常。

嘗試將newNode = newNode.next更改為head = head.next這樣您實際上是在更新head的值。 或者,您可以嘗試將循環條件更改為newNode != null

在while循環中更改條件

newNode = head;
    while (newNode != null) {
        ....
        newNode = newNode.next;  
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM