摘要:
题目
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 $0$ 之外,这两个数都不会以 $0$ 开头。
示例:
输入: (2 -> 4 -> 3) + (5 -> 6 -> 4)
输出: 7 -> 0 -> 8
原因: 342 + 465 = 807
朴素解法
我们需要创建一个新的链表作为相加后的返回对象,而且在新的链表构造过程中,其头结点需要不断移动,从而导致无法返回整个链表。
我们可以定义独立于新链表的一个 超级头结点 ,让其指向新的链表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { int carry = 0; ListNode pre = new ListNode(0); ListNode cur = pre; while (l1 != null || l2 != null) { int value1 = l1 == null ? 0 : l1.val; int value2 = l2 == null ? 0 : l2.val; int sum = value1 + value2 + carry;
if (sum >= 10) carry = 1; else carry = 0; cur.next = new ListNode(sum % 10); cur = cur.next; if (l1 != null) l1 = l1.next; if (l2 != null) l2 = l2.next; } if (carry == 1) cur.next = new ListNode(1); return res.next; } }
|