[kotlin] 코틀린에서 제네릭을 사용하여 링크드 리스트(Linked List)를 다루는 방법은 어떻게 되는가?

링크드 리스트 클래스 생성

우선, 제네릭을 사용하여 단일 노드를 나타내는 LinkedListNode 클래스를 만듭니다. 이 클래스는 값을 저장하고, 다음 노드를 가리키는 포인터를 가지고 있습니다.

class LinkedListNode<T>(val value: T) {
    var next: LinkedListNode<T>? = null
}

링크드 리스트 클래스 구현

이제 제네릭을 사용하여 링크드 리스트를 다루는 클래스를 구현할 차례입니다. LinkedList 클래스는 링크드 리스트의 헤드 노드를 가리키는 포인터를 가지고 있으며, 여러 연산(추가, 삭제, 검색 등)을 지원합니다.

class LinkedList<T> {
    private var head: LinkedListNode<T>? = null

    fun add(value: T) {
        val newNode = LinkedListNode(value)
        if (head == null) {
            head = newNode
        } else {
            var current = head
            while (current?.next != null) {
                current = current.next
            }
            current?.next = newNode
        }
    }

    // 다른 연산들을 추가로 구현할 수 있습니다.
}

링크드 리스트 사용하기

이제 만든 LinkedList 클래스를 사용하여 다양한 타입의 링크드 리스트를 만들고 다룰 수 있습니다.

val stringList = LinkedList<String>()
stringList.add("hello")
stringList.add("world")

val intList = LinkedList<Int>()
intList.add(1)
intList.add(2)
intList.add(3)

이와 같이, 코틀린에서 제네릭을 사용하여 링크드 리스트를 다룰 수 있습니다.