[英]java.lang.stackoverflowerror when adding to a Linked-List
[英]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.