链表
解题思路
初始化一个哑结点 dmy ,迭代 l1、l2 并将 l1、l2 的和加入到 dmy 的后面;
l1、l2 的和要判断是否有进位,超过 10 要进位;
下一次求 l1、l2 的和将进位加进去;
最后返回结果 dmy.next;
复杂度
-
时间复杂度:
O(max(m,n))
,其中 m 和 n 分别为两个链表的长度,要遍历两个链表的全部位置,而处理每个位置只需要O(1)
的时间; -
空间复杂度:
O(1)
,注意返回值不计入空间复杂度;
代码实现
var addTwoNumbers = function (l1, l2) {
let dmg = new ListNode(0, null);
let curr = dmg;
let addOne = 0;
while (l1 || l2 || addOne) {
let val1 = l1 ? l1.val : 0;
let val2 = l2 ? l2.val : 0;
let sum = val1 + val2 + addOne;
addOne = sum >= 10 ? 1 : 0;
curr.next = new ListNode(sum % 10, null);
curr = curr.next;
l1 && (l1 = l1.next);
l2 && (l2 = l2.next);
}
return dmg.next;
};
leetcode🧑💻 19. 删除链表的倒数第 N 个结点
上一篇