[英]Printing Doubly Linked List in Java is throwing Exception(Stack Overflow Exception)
我有一個雙重鏈表實現,如下所示。 但是,當我嘗試打印列表時,出現堆棧溢出異常。 我不確定,但它看起來與重寫toString()方法有關。 有人可以解釋一下到底是什么造成了這個問題。
// Main function class
public class Main {
public static void main(String[] args) {
DoublyLinkedList list = new DoublyLinkedList();
list.insertAtStart(2);
list.insertAtStart(3);
list.insertAtStart(4);
list.insertAtStart(5);
list.insertAtStart(6);
list.insertAtStart(7);
list.print();
}
}
// Doubly node class
public class DoublyLinkedListNode {
private int data;
private DoublyLinkedListNode next;
private DoublyLinkedListNode prev;
public DoublyLinkedListNode(int data)
{
this.data = data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public DoublyLinkedListNode getNext() {
return next;
}
public void setNext(DoublyLinkedListNode next) {
this.next = next;
}
public DoublyLinkedListNode getPrev() {
return prev;
}
public void setPrev(DoublyLinkedListNode prev) {
this.prev = prev;
}
@Override
public String toString() {
return "DoublyLinkedListNode{" +
"data=" + data +
", next=" + next +
", prev=" + prev +
'}';
}
}
// Here I have created function for inserting and printing the elemnts in doubly linked list
public class DoublyLinkedList {
public DoublyLinkedListNode head;
public void insertAtStart(int data)
{
DoublyLinkedListNode newNode = new DoublyLinkedListNode(data);
if(head == null)
{
head = newNode;
}
else
{
newNode.setNext(head);
head.setPrev(newNode);
head = newNode;
}
}
@Override
public String toString() {
return "DoublyLinkedList{" +
"head=" + head +
'}';
}
public void print()
{
DoublyLinkedListNode currentNode = head;
while(currentNode != null)
{
System.out.print(currentNode);
System.out.print("<=>");
currentNode = currentNode.getNext();
}
System.out.println("null");
}
}
此代碼導致無限遞歸。
@Override
public String toString() {
return "DoublyLinkedListNode{" +
"data=" + data +
", next=" + next +
", prev=" + prev +
'}';
}
逐步執行。
將頭節點轉換為字符串時,它想將下一個節點轉換為字符串。
將第二個節點轉換為字符串時,它想將前一個節點(再次是頭節點)轉換為字符串。
無限遞歸導致無限嵌套的方法調用,每次調用都會增加堆棧,直到耗盡堆棧並獲得堆棧溢出為止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.