CCI 2.5 链表整数求和
2014-07-30 11:16
246 查看
给定两个用链表表示的整数,每一个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。
示例
输入:(7->1->6) + (5->9->2), 即 617 + 295.
输出:2->1->9, 即912.
进阶
假设这些数位是正向存放的,请再做一遍。
示例
输入:(6->1->7) + (2->9->5), 即617 + 295.
输出:9->1->2, 即912.
**进阶的解法告诉我们,涉及单链表逆序的问题,可以借助栈来解决。
示例
输入:(7->1->6) + (5->9->2), 即 617 + 295.
输出:2->1->9, 即912.
进阶
假设这些数位是正向存放的,请再做一遍。
示例
输入:(6->1->7) + (2->9->5), 即617 + 295.
输出:9->1->2, 即912.
**进阶的解法告诉我们,涉及单链表逆序的问题,可以借助栈来解决。
package test; import java.util.Stack; public class AddLinkedInt { //两个整数反向存放 //即,个位排在链表的首部 public Node addLinkedInt(Node l1, Node l2){ Node newHead = new Node(0); Node tail = newHead; int carry = 0; Node p1 = l1, p2 = l2; while(p1!=null || p2!=null){ int val1 = (p1==null)? 0 : p1.val; int val2 = (p2==null)? 0 : p2.val; int val = (val1+val2+carry)%10; carry = (val1+val2+carry)/10; tail.next = new Node(val); tail = tail.next; } if(carry != 0) tail.next = new Node(carry); return newHead.next; } //两个整数正向存放 //即,个位排在链表的末尾 public Node addLinkedInt(Node l1, Node l2){ //这里要借助栈来处理 Stack<Integer> st1 = new Stack<Integer>(); Stack<Integer> st2 = new Stack<Integer>(); Node p1=l1, p2=l2; //将两链表的数据分别压入栈中 while(p1 != null){ st1.push(p1.val); p1 = p1.next; } while(p2 != null){ st2.push(p2.val); p2 = p2.next; } //将结果相加入栈 Stack<Integer> res = new Stack<Integer>(); int carry=0; while( !st1.empty() || !st2.empty()){ int val1 = st1.empty() ? 0 : st1.pop(); int val2 = st2.empty() ? 0 : st2.pop(); res.push((val1+val2+carry)%10); carry = (val1+val2+carry)/10; } if(carry != 0)//注意进位的处理 res.push(carry); Node newHead = new Node(0); Node tail = newHead; while(!res.empty()){ tail.next = new Node(res.pop()); tail = tail.next; } return newHead.next; } }
相关文章推荐
- 《CTCI》2.5 链表表示的整数求和
- 程序员面试金典: 9.2链表 2.5对两个用链表表示的整数求和
- leetcode——Add Two Numbers 两个链表表示的正整数对其求和(AC)
- 程序员面试金典(6)两个链表逆向表示的整数求和
- 算法#25--两整数链表求和
- 【Java】对两个用链表表示的整数求和
- 链式A+B有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。 给定两个链表ListNode* A,ListN
- 给定两个链表表示的整数,编写函数对这两个整数求和,并用链表形式返回结果。
- 面试金典--对链表表示的整数求和
- 链表求和
- 蓝桥杯 ADV-211 算法提高 2-2整数求和
- C#练习——判断任意一个整数是否为质数、1-100质数求和以及1-100的整数求和
- Lintcode167.链表求和C++
- 链表实现多项式求和求积
- 链表求和
- 链表求和
- CCI 2.1 移除未排序链表中的重复节点
- 读一组整数到vector对象,计算并输入每对相邻元素的和,如果读入元素个数为奇数,则提示用户最后一个元素没有求和,并输出其值。
- 一、lintcode刷题记录--矩阵面积、二叉树的最大节点、整数排序、删除链表中的元素
- 167 - 链表求和