题目
LeetCode 2. Add Two Numbers
思路
两个逆序存储数值的链表, 要求返回数值相加结果并且逆序存储的链表.
就两个链表一起遍历, 每一位相加:
- 若小于10直接拼接到新链表中
- 若大于10, 则个位数拼接到新链表, 十位数加入到下一个链表节点的计算中(实际就是进位)
其实就是两数相加, 链表的头节点就是个位, 依此类推.
代码实现
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
|
class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode support = new ListNode(); ListNode p = l1; ListNode q = l2; ListNode curr = support; int carry = 0; while (p != null || q != null) { int x = (p == null) ? 0 : p.val; int y = (q == null) ? 0 : q.val; int sum = carry + x + y; carry = sum / 10; curr.next = new ListNode(sum % 10); curr = curr.next; if (p != null) { p = p.next; } if (q != null) { q = q.next; } } if (carry > 0) { curr.next = new ListNode(carry); } return support.next; } }
|