Leetcode, Merge Two Sorted Lists çözümü (Kotlin)

Soruda, sıralanmış 2 adet bağlı liste veriliyor. Bu listelerin yine sıralı bir şekilde birleştirilmesi isteniyor. Yani [1,2,3], [1,3,4] --> [1,1,2,3,3,4] şeklinde.

Çözüm

/**
 * Example:
 * var li = ListNode(5)
 * var v = li.`val`
 * Definition for singly-linked list.
 * class ListNode(var `val`: Int) {
 *     var next: ListNode? = null
 * }
 */
class Solution {
    fun mergeTwoLists(list1: ListNode?, list2: ListNode?): ListNode? {
        
        //Listelerden biri veya ikisi de null ise sıralamaya gerek yok.
        if(list1 == null || list2 == null){
            return list2?: list1
        }
        
        var tempList1: ListNode? = list1
        var tempList2: ListNode? = list2
        
        //Burada head adında obje oluşturuyorum ki while döngüsünde
        //oluşturulacak yeni sıralı listeyi head'in devamına(next) bağlayabilelim. 
        //Yani bizim listemiz head.next ve devamında olacak.
        var head: ListNode? = ListNode(0)
        var tempSortedList = head
        
        while(tempList1 != null || tempList2 != null){
            
            //Listelerden birinin sonuna ulaşılmışsa bu if kapsamı çalışacaktır ve
            //son elemanına henüz varılmamış olan listenin kalan kısmı,
            //bizim oluşturduğumuz yeni sıralı listenin devamına eklenecektir.
            if(tempList1 == null || tempList2 == null){
                tempList1?.let{
                    tempSortedList?.next = it
                }
                tempList2?.let{
                    tempSortedList?.next = it
                }
                break
            }
            
            //Değeri büyük olan düğüm, oluşturduğumuz listenin next'ine atanır
            //ve sadece atanan düğüm bir ilerletilir.
            if(tempList1?.`val` >= tempList2?.`val`){
                tempSortedList?.next = ListNode(tempList2?.`val`)
                tempList2 = tempList2?.next
            }else{
                tempSortedList?.next = ListNode(tempList1?.`val`)
                tempList1 = tempList1?.next
            }
            tempSortedList = tempSortedList?.next
        }
        
        //Yukarıda, listemiz head.next ve devamında olacak şeklinde belirtmiştim.
        head = head?.next
        return head
    }
}

Yorumlar