链表存储的两数相加(LeetCode 2)
2019-04-03 17:06
369 查看
题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
刚看到时思路:先找到两个链表中的短的,遍历短的链表,把短链表中对应的元素加到长链表对应的位置上,然后判断长链表该位置元素值是否大于等于10,若其大于等于10,则向前进位,进位时需要判断他后一个位置是否有节点存在,若节点不存在则新建一个结点查到其后面,若存在直接进位。
然后就报错了0.0。后面分析在进位的时候可能出现一直进位的情况,如1->null +9->9->9->null没考虑进去,然后想到了递归
最终思路:前面都不变,每加一次需要调整一次,词穷了.........直接上代码吧
[code]public class Leetcode2 { public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public void check(ListNode L) { if(L.val>=10) {//递归停止条件 if(L.next!=null) { L.next.val+=L.val/10; }else { L.next=new ListNode(L.val/10); } check(L.next); L.val%=10; } } public ListNode addTwoNumbers(ListNode l1, ListNode l2) { int len1=0,len2=0; for(ListNode temp=l1;temp!=null;temp=temp.next,len1++); for(ListNode temp=l2;temp!=null;temp=temp.next,len2++); ListNode L_long,L_less; if(len1>len2) { L_long=l1; L_less=l2; }else{ L_long=l2; L_less=l1; } for(ListNode temp1=L_less,temp2=L_long;temp1!=null;temp1=temp1.next) { temp2.val+=temp1.val; check(temp2); temp2=temp2.next; } return L_long; } }
最终发现在用时上超过java100%的用户,开心0.0
相关文章推荐
- [LeetCode]2. Add Two Numbers用链表逆序存储的两个数相加
- LeetCode 02. 两数相加(链表) 03.最大不重复的字符串
- leetcode 链表里的两数相加 C++实现
- Leetcode 第二题,两数链表相加
- [Leetcode #2]Add Two Numbers 链表存储的两个正数相加
- Leetcode 2 两数相加【链表】
- [Leetcode #2]Add Two Numbers 链表存储的两个正数相加
- LeetCode 2 两数相加(链表)
- Leetcode002--单链表两数相加
- 【LeetCode-2】 两数相加 (链表)
- 链表:链表两数相加( LeetCode 2. Add Two Numbers(两数相加))
- [Leetcode]Add Two Numbers 链表实现大数字相加
- LeetCode01—两数相加
- Leetcode(C++)——2. 两数相加
- (leetcode)2. 两个链表相加Add Two Numbers--Java
- LeetCode之链表数相加
- leetcode 5. 两个链表逐个元素相加 Add Two Numbers
- leetcode2:两数相加
- LeetCode2. python实现:两数相加问题☆☆
- [Leetcode] 2. 两数相加 java