Ошибка StackOverflow при реализации DoublyLinkedList - PullRequest
1 голос
/ 18 апреля 2020

Я реализую двусвязный список, используя kotlin. Но я получаю StackOverflow Error

Main

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)

}

DoublyLinkedList

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++
}

}

DataClass

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)

после 1-го элемента pu sh он показывает Исключение в потоке "main" java .lang.StackOverflowError . Почему это происходит какие-либо идеи.

1 Ответ

1 голос
/ 18 апреля 2020

Решено

Вместо использования DataClass я использовал класс. Потому что в Kotlin классе данных компилятор автоматически получает следующие члены из всех свойств, объявленных в первичном конструкторе:

  • пара equals () / hashCode ();
  • toString () в форме «Пользователь (имя = Джон, возраст = 42)»;
  • componentN () функции, соответствующие свойствам в порядке их объявления;
  • copy () функция
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...