链表求和
2016-07-10 20:43
204 查看
题目
你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。样例
给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null
解题
通过新建结点求和注意进位情况,特别是最后可能还要进位的
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { /** * @param l1: the first list * @param l2: the second list * @return: the sum list of l1 and l2 */ public ListNode addLists(ListNode l1, ListNode l2) { // write your code here ListNode p1 = l1; ListNode p2 = l2; if(p1 == null) return p2; if(p2 == null) return p1; ListNode head = new ListNode(0); ListNode p3 = head; int flag = 0; while(p1!=null && p2!=null){ int sum = flag + p1.val + p2.val; flag = sum/10; sum = sum%10; ListNode s = new ListNode(sum); p3.next = s; p3 = p3.next; p1 = p1.next; p2 = p2.next; } p1 = p1==null?p2:p1; while(p1!=null ){ int sum = flag + p1.val; flag = sum/10; sum = sum%10; ListNode s= new ListNode(sum); p3.next = s; p3 = p3.next; p1 = p1.next; } if(flag == 1){ ListNode s= new ListNode(1); p3.next = s; p3 = p3.next; } return head.next; } }
通过修改其中一个结点的值方法
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { /** * @param l1: the first list * @param l2: the second list * @return: the sum list of l1 and l2 */ public ListNode addLists(ListNode l1, ListNode l2) { // write your code here ListNode p1 = l1; ListNode p2 = l2; if(p1 == null) return p2; if(p2 == null) return p1; ListNode head = new ListNode(0); ListNode p3 = head; int flag = 0; while(p1!=null && p2!=null){ int sum = flag + p1.val + p2.val; flag = sum/10; sum = sum%10; p1.val = sum; p3.next = p1; p3 = p3.next; p1 = p1.next; p2 = p2.next; } p1 = p1==null?p2:p1; while(p1!=null ){ int sum = flag + p1.val; flag = sum/10; sum = sum%10; p1.val = sum; p3.next = p1; p3 = p3.next; p1 = p1.next; } if(flag == 1){ ListNode s= new ListNode(1); p3.next = s; p3 = p3.next; } return head.next; } }
相关文章推荐
- 图文混排(2) 详解版
- C语言中关于变量的定义
- linux ——make
- 优化
- Android 系统服务一览表
- 泛型接口的实现方式二:直接在接口中指定具体类型
- Python开发【第十二篇】:DOM
- 1200 同余方程[一中数论随堂练]
- iOS 图文混排 (Swift版)
- Java 运算符的总结
- android fill_parent和match_parent 的区别
- Xml解析
- poj 3984 迷宫问题 bfs
- Python开发【第十一篇】:JavaScript
- BZOJ 2286: [Sdoi2011]消耗战
- Python: 渐进猜数字游戏 <2> 我的游戏
- LeetCode Reverse Linked List I, II详解
- 【HDU】5452 Minimum Cut(2015 ACM/ICPC Shenyang Online)
- Mybatis缓存_7
- 1040. Longest Symmetric String (25)