使用kotlin完成这个题目:2. 两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 1: 输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807. 示例 2: 输入:l1 = [0], l2 = [0] 输出:[0] 示例 3: 输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] 输出:[8,9,9,9,0,0,0,1] 提示: 每个链表中的节点数在范围 [1, 100] 内 0 <= Node.val <= 9 题目数据保证列表表示的数字不含前导零
时间: 2023-07-02 19:13:41 浏览: 271
以下是使用 Kotlin 实现的代码:
```kotlin
class ListNode(var `val`: Int) {
var next: ListNode? = null
}
fun addTwoNumbers(l1: ListNode?, l2: ListNode?): ListNode? {
var carry = 0
var p = l1
var q = l2
val dummyHead = ListNode(0)
var curr = dummyHead
while (p != null || q != null) {
val x = p?.`val` ?: 0
val y = q?.`val` ?: 0
val sum = carry + x + y
carry = sum / 10
curr.next = ListNode(sum % 10)
curr = curr.next!!
if (p != null) p = p.next
if (q != null) q = q.next
}
if (carry > 0) {
curr.next = ListNode(carry)
}
return dummyHead.next
}
```
这里定义了一个 `ListNode` 类来表示链表节点。`addTwoNumbers` 函数接受两个链表 `l1` 和 `l2`,并返回它们的和的链表。
算法的实现方法是,遍历两个链表,将对应位置的数字相加,再加上上一位的进位,得到当前位的和。如果和大于等于 10,则进位为 1;否则进位为 0。将当前位的和加入到新链表中,并将指针指向下一个节点。最后,如果最高位有进位,则需要在新链表中添加一个值为 1 的节点。
注意,这里使用了一个哑节点 `dummyHead` 来保存新链表的头节点,这样就不需要单独处理新链表的头节点了。
阅读全文