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
Yorum Gönder