两个链表相加
来源:互联网 发布:香港科技大学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
- 两个链表相加
- 两个链表相加
- 两个链表相加
- 两个链表相加
- 两个十字链表相加
- 两个链表数字相加
- LinkLists 两个链表相加 @CareerCup
- 链表实现两个大正整数相加
- 链表实现两个数字相加
- 链表之两个多项式相加
- 算法:两个单链表生成相加链表
- 链表实现两个数相加
- 两个单链表生成相加链表
- 两个单链表生成相加链表
- 两个单链表生成相加链表II
- 将两个链表的元素相加
- 两个随机长度的链表相加
- 两个单连生成相加链表
- Java 10.18.1
- Python中GBK, UTF-8和Unicode的编码问题
- 封装
- 数据结构之静态查找表
- Redis源码分析(五)——简单动态字符串(sds)
- 两个链表相加
- java 10.18.2
- Android Widget支持的布局和控件以及所占单元格计算
- Android WifiDisplay分析二:Wifi display连接过程
- 双系统重新安装后修复引导xp、win7、ubuntu
- CentOS 6.3(x86_64)下安装Oracle 10g R2
- HDU 3639 Hawk-and-Chicken(Tarjan缩点+反向DFS)
- BestCoder Round #14
- 学生课堂经验值管理系统