两个链表相加

来源:互联网 发布:香港科技大学gpa 知乎 编辑:程序博客网 时间:2024/06/05 22:58

给定两个链表,每个节点保存一位数字,节点顺序为反方向。

如下例子:

(3->1->5)+ (5->9->2) = (8->0-8)


一下是java版本

public class ListAddition{public static void main(String[] args){//case oneLinkedList<Integer> leftList1 = new LinkedList<Integer>();leftList1.add(9); leftList1.add(9);LinkedList<Integer> rightList1 = new LinkedList<Integer>();rightList1.add(1);//output sould be 1->4print(listAddition(leftList1, rightList1));//case twoLinkedList<Integer> leftList2 = new LinkedList<Integer>();LinkedList<Integer> rightList2 = new LinkedList<Integer>();rightList2.add(1);//output 1print(listAddition(leftList2, rightList2));//case threeLinkedList<Integer> leftList3 = null;LinkedList<Integer> rightList3 = new LinkedList<Integer>();//output nullprint(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 listLinkedList<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 carryif(carry > 0) list.add(1);return list;}}

输出结果如下:

0 0 1

1

null list

0 0
原创粉丝点击