使用kotlin解决这个leetcode问题:21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [], l2 = [0] 输出:[0] 提示: 两个链表的节点数目范围是 [0, 50] -100 <= Node.val <= 100 l1 和 l2 均按 非递减顺序 排列
时间: 2024-01-13 07:02:24 浏览: 127
lrucacheleetcode-kt-leetcode:kt-lee代码
以下是使用Kotlin解决该问题的代码:
```kotlin
class ListNode(var `val`: Int) {
var next: ListNode? = null
}
fun mergeTwoLists(l1: ListNode?, l2: ListNode?): ListNode? {
if (l1 == null) {
return l2
}
if (l2 == null) {
return l1
}
var p1 = l1
var p2 = l2
val dummy = ListNode(-1)
var cur = dummy
while (p1 != null && p2 != null) {
if (p1.`val` < p2.`val`) {
cur.next = p1
p1 = p1.next
} else {
cur.next = p2
p2 = p2.next
}
cur = cur.next!!
}
cur.next = p1 ?: p2
return dummy.next
}
```
该代码定义了一个链表节点类`ListNode`,其中包含节点值和指向下一个节点的指针。`mergeTwoLists`函数用于合并两个升序链表,并返回新链表的头节点。该函数首先判断两个链表是否为空,若其中一个为空,则直接返回另一个链表。然后定义指针p1和p2指向两个链表的头节点,定义一个虚拟头节点dummy,以及一个指向当前节点的指针cur。接下来,使用循环比较p1和p2节点的值,将较小值的节点接到cur的next节点上,并将指针后移。最后将剩余的节点接到新链表的末尾,并返回dummy.next节点即可。
阅读全文