给定两个链表,每个节点保存一位数字,节点顺序为反方向。
如下例子:
(3->1->5)+ (5->9->2) = (8->0-8)
一下是java版本
public class ListAddition{
public static void main(String[] args){
//case one
LinkedList<Integer> leftList1 = new LinkedList<Integer>();
leftList1.add(9); leftList1.add(9);
LinkedList<Integer> rightList1 = new LinkedList<Integer>();
rightList1.add(1);
//output sould be 1->4
print(listAddition(leftList1, rightList1));
//case two
LinkedList<Integer> leftList2 = new LinkedList<Integer>();
LinkedList<Integer> rightList2 = new LinkedList<Integer>();
rightList2.add(1);
//output 1
print(listAddition(leftList2, rightList2));
//case three
LinkedList<Integer> leftList3 = null;
LinkedList<Integer> rightList3 = new LinkedList<Integer>();
//output null
print(listAddition(leftList3, rightList3));
}
public static void print(LinkedList<Integer> list){
if(null == list){
System.out.println("null list");
return;
}
StringBuilder builder = new StringBuilder();
for(int i : list){
builder.append(i + " ");
}
System.out.println(builder.toString().trim());
}
public static LinkedList<Integer> listAddition(LinkedList<Integer> left, LinkedList<Integer> right){
if(null == left || null == right) return null; //special case for null list
LinkedList<Integer> list = new LinkedList<Integer>();
int carry = 0;
int idx = 0;
int val = 0;
for(; idx <left.size() &&idx < right.size(); idx++){
val = left.get(idx) + right.get(idx) + carry;
list.add(val%10);
carry = val / 10;
}
while( idx < left.size()){
val = left.get(idx) + carry;
list.add(val %10);
carry = val/10;
idx++;
}
while( idx < right.size()){
val = right.get(idx) + carry;
list.add(val %10);
carry = val/10;
idx++;
}
//check carry
if(carry > 0) list.add(1);
return list;
}
}
输出结果如下:
0 0 1
1
null list