题目
2. 两数相加
思路
总体上可以分为两类,迭代和递归
- 迭代
迭代链表在边界判断上具有许多方式,这里选择将两条链表看成是相等长度的,利用两个变量,dummy
,p
记录节点位置,在内部实现保证迭代不出错即可
- 将两条链表视为相等长度,但是实际过程中,需要判断链表是否已经遍历到头,也就是两个
if
- 两条链表对应节点的
val
相加后再次存入
- 两个
if
保证其链表不会遍历出错,而 dummy
,p
记录对应的节点,最终如果有 carry
则新建 node
节点
- 理解
while
和 两个 if
之间的转换
- 递归
待完善
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
function addTwoNumbers(l1: ListNode | null, l2: ListNode | null): ListNode | null { if (l1 === null && l2 === null) return null;
let p1 = l1, p2 = l2, dummy: ListNode = new ListNode(), p: ListNode = new ListNode(); let carry = 0;
while (p1 !== null || p2 !== null) { const n1 = p1 === null ? 0 : p1.val; const n2 = p2 === null ? 0 : p2.val; const num = n1 + n2 + carry; carry = Math.floor(num / 10); if (p1 !== null) { dummy.next = l1; p = p1 p1.val = num % 10; p1 = p1.next }
if (p2 !== null) { dummy.next = l2; p = p2; p2.val = num % 10; p2 = p2.next; } }
if (carry !== 0) { p.next = new ListNode(carry) }
return dummy.next; };
|
其他
2. 两数相加 | 链表长度_一抹阳光&的博客-CSDN博客