给定两个非空的链表,表示两个非负整数。 数字以相反的顺序存储,每个节点包含一个数字。 添加两个数字并将其作为链表返回。

您可以假设两个数字不包含任何前导零,除了数字0本身。

思路:

参考常规的两数相加算式以及进位思想,两数相加与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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

ListNode root = null;
ListNode parent = null;

ListNode n1 = l1;
ListNode n2 = l2;
int val = 0;
int carry = 0;

while(true){
if(n1 == null && n2 == null){
//在此情况下两个数各个位数都已经相加完成,只剩最后的进位数
if(carry != 0){
ListNode child = new ListNode(carry);
parent.next = child;
parent = child;
}
break;
}else if(n1 != null && n2 != null){
val = n1.val + n2.val + carry;
carry = val / 10;
val = val % 10;
n1 = n1.next;
n2 = n2.next;
}else if(n1 == null && n2 != null){
val = n2.val + carry;
carry = val / 10;
val = val % 10;
n1 = null;
n2 = n2.next;
}else if(n1 != null && n2 == null){
val = n1.val + carry;
carry = val / 10;
val = val % 10;
n1 = n1.next;
n2 = null;
}


if(root == null){
root = new ListNode(val);
parent = root;
}else{
ListNode child = new ListNode(val);
parent.next = child;
parent = child;
}
}

return root;
}

}

原文地址:2. Add Two Numbers