Implementinf DoublyLinkedList时出现StackOverflow错误

时间:2020-04-18 10:18:57

标签: java kotlin doubly-linked-list

我正在使用kotlin实现双向链表。但是我收到了StackOverflow错误

主要

fun main(args: Array<String>) {
val doublyLinkedList = DoublyLinkedList()
doublyLinkedList.push(5)
doublyLinkedList.push(6)
doublyLinkedList.push(7)
doublyLinkedList.push(8)
doublyLinkedList.push(9)
println(doublyLinkedList.headNode)

}

双向链接列表

class DoublyLinkedList {
var headNode: DNode? = null
var tailNode: DNode? = null
var length: Int = 0

fun isEmpty(): Boolean = length == 0

fun push(value:Any) {
    val newNode = DNode(value =value )
    if (isEmpty()){
        tailNode = newNode
    }else{
        headNode?.prevNode = newNode
    }
    newNode.nextNode = headNode
    headNode = newNode
    length++
}

}

数据类

data class DNode(var value: Any,
             var prevNode: DNode? = null,
             var nextNode: DNode? = null)

错误

Exception in thread "main" java.lang.StackOverflowError
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:449)
at java.lang.StringBuilder.append(StringBuilder.java:136)
at ds.doublyLinkedList.DNode.toString(DNode.kt)

在第一个元素按下后,它在线程“ main” java.lang.StackOverflowError 中显示异常。为什么会发生这种想法?

1 个答案:

答案 0 :(得分:1)

已解决

我没有使用DataClass,而是使用了class。因为在Kotlin数据类中,编译器会自动从主要构造函数中声明的所有属性中派生以下成员:

  • equals()/ hashCode()对;
  • toString()的形式为“ User(name = John,age = 42)”;
  • componentN()函数,它们按照声明的顺序对应于属性;
  • copy()函数