java两链表求和
2017-10-28 20:59
239 查看
需求:
两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
比如:给出两个链表
3->1->5->null和
5->9->2->null,返回
8->0->8->null
思路:
遍历两个链表,其实就是遍历每个节点,当两个节点至少有一个不是null或者进位不是0的条件下,需要创建新的节点,每个新的节点的值为(进位+非空节点值)%10,进位数为(进位+非空节点值)/10。如果上述三个条件都不满足,那么说明两个节点都是null,并且进位是0,那么就不需要产生新的节点,直接返回初始节点即可。
难点:
1、创建返回连接节点result,不能直接对其进行操作,因为最后返回的时候会出错,所以需要另外一个节点代替它,使用p2、因为每次创建新的节点都是上一节点的next,所以result节点实际上是没用的,所以返回的时候应该返回result.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 result = new ListNode(0); ListNode p = result; //初始化进位值0 int carry = 0; //遍历两个链表,当l1和l2至少有一个不是null或者carry!=0时,才需要创建新的节点 while(l1 != null || l2 != null || carry != 0){ //如果l1 != null,计算当前位的值需要加上l1的值 if(l1 != null){ carry += l1.val; l1 = l1.next; } //如果l2 != null,计算当前位的值需要加上l2的值 if(l2 != null){ carry += l2.val; l2 = l2.next; } p.next = new ListNode(carry % 10); carry /= 10; p = p.next; } return result.next; } }
相关文章推荐
- Java实现-链表求和2
- 一元多项式求和(Java链表实现)
- 【Java】对两个用链表表示的整数求和
- java用多线程进行链表求和器
- Leet Code 2 Add Two Numbers - 链表表示的两个数求和 - Java
- 【LintCode-167】链表求和(Java实现)
- Java中单链表的部分操作总结
- JAVA来表现链表
- Java链表基础(3)-基本操作
- 大话数据结构(八)Java程序——双向链表的实现 线性链表——双向链表
- 剑指offer面试题5 从头到尾打印链表(java)
- java单链表代码实现
- Java双向链表的实现
- 急需:JAVA求和程序
- LintCode_167_链表求和
- java反转链表实现
- Java 合并两个有序链表
- Java中的链表-----LinkedList<E>泛型类
- [Java] 找出链表中倒数第k个节点
- leetcode解题61. Rotate List java版(旋转链表)