java - 运行列表时出现堆栈溢出错误

标签 java data-structures

我正在研究数据结构,我必须自己做一个双链表,创建 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) 

最佳答案

异常堆栈跟踪可以证实这一点,但问题非常明显:

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

因此,当您将节点转换为字符串时,您也会转换它的两个邻居。这会导致调用它们的 toString() 方法,从而转换它们的 2 个邻居,从而导致调用它们的 toString() 方法,从而转换它们的 2 个邻居,依此类推。等等

关于java - 运行列表时出现堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25704615/

相关文章:

c - 在 C 中使用快速排序反向排序(降序)?

data-structures - Lucene 如何过滤一系列连续值

algorithm - 查询矩形集合以查找输入矩形的重叠

java - 如何在 Spring 3 MVC REST API 中继承 RequestMappings

Java 和 SSL 证书

Java Jdbc 事务

algorithm - 从堆中间删除一个节点

algorithm - 如何对 2 个未排序列表进行排序并创建一个排序列表?

java - 在java中生成具有特定位大小的随机字符串

java - 在运行时重新加载 JTree