2. add two numbers

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
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int carry = 0;
int index_sum = 0;
ListNode p = null;
ListNode tmp = null;
ListNode tmp1 = l1;
ListNode tmp2 = l2;
int val1,val2;
while(tmp1 != null || tmp2 != null) {
val1 = tmp1 != null ? tmp1.val : 0;
val2 = tmp2 != null ? tmp2.val : 0;
index_sum = val1 + val2 + carry;
if(index_sum > 9){
index_sum = index_sum - 10;
carry = 1;
}
else {
carry = 0;
}
if(p == null) {
tmp = new ListNode(index_sum);
p = tmp;
}
else {
tmp.next = new ListNode(index_sum);
tmp = tmp.next;
}
if(tmp1 != null) {
tmp1 = tmp1.next;
}
if(tmp2 != null) {
tmp2 = tmp2.next;
}
}
if(carry == 1) {
tmp.next = new ListNode(1);
}
return p;
}
}

操作单链表进行运算,需要注意的是特殊情况的处理:
1、两个链表长度不同,一个链表为空
3、最后一位进位问题,生成的链表长度会是MAX(l1,l2)+1