Add Two Numbers
来源:互联网 发布:武汉大学网络教育平台 编辑:程序博客网 时间:2024/04/30 00:11
2.Add Two Numbers
from LeetCode
Description
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Solution
代码实现
A:在计算和之前就new出空节点
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode presult = new ListNode(0); ListNode result = presult; int carry = 0; ListNode n1,n2; for(n1 = l1,n2 = l2;n1 != null && n2!=null ;n1=n1.next) { int temp =(n1.val+n2.val+carry); presult.val = temp%10; carry = temp/10; n2 = n2.next; presult.next = new ListNode(0); presult = presult.next; } while(n1 != null) { int temp = (n1.val+carry); presult.val=temp%10; carry = temp/10; presult.next = new ListNode(0); presult = presult.next; n1 = n1.next; } while(n2 != null) { int temp = (n2.val+carry); presult.val=temp%10; carry = temp/10; presult.next = new ListNode(0); presult = presult.next; n2 = n2.next; } if(n1 == null && n2 == null) if(carry != 0) { presult.val = carry; presult.next = new ListNode(0); presult = presult.next; } //删除多new出的节点 ListNode prev; presult = result; while(presult != null) { prev = presult; presult=presult.next; if(presult.val==0 &&presult.next == null ) { prev.next=null; break; } } return result; }}
B:在计算和之后new节点,并用结果调用构造函数
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode presult = new ListNode(0),result = presult; int carry = 0; ListNode n1,n2; for(n1 = l1,n2 = l2;n1 != null && n2!=null ;n1=n1.next) { int temp =(n1.val+n2.val+carry); presult.next = new ListNode(temp%10); carry = temp/10; n2 = n2.next; presult = presult.next; } while(n1 != null) { int temp = (n1.val+carry); presult.next = new ListNode(temp%10); carry = temp/10; presult = presult.next; n1 = n1.next; } while(n2 != null) { int temp = (n2.val+carry); presult.next = new ListNode(temp%10); carry = temp/10; presult = presult.next; n2 = n2.next; } if(carry != 0) presult.next = new ListNode(carry); //第一个节点是多余的,是为了不破坏代码逻辑new出来的头节点 return result.next; }}
日志:
我的算法学得真的不是很好,大一的时候就有同学参加各种集训队了,当我意思到自己比别人差的时候已经是现在了,大二快大三了。刷题就算是维持自己写代码的常态吧,然后把自己的答案记录在博客上观察自己的成长,并不断更新更优的解决方案。Add Two Numbers此题只是用到了ListNode,链表的数据结构。没有用到高深的算法。
0 0
- Add two numbers & Add binary
- LeetCode: Add Two Numbers
- Add Two Numbers
- LeetCode: Add Two Numbers
- [LeetCode]Add Two Numbers
- LeetCode Add Two Numbers
- Leetcode: Add Two Numbers
- Add Two Numbers
- LeetCode : Add Two Numbers
- LeetCode Add Two Numbers
- [LeetCode] Add Two Numbers
- LeetCode4: Add Two Numbers
- Leetcode : Add Two Numbers
- Add Two Numbers
- 【leetcode】Add Two Numbers
- add two numbers
- Add Two Numbers
- Add Two Numbers
- UVALive 6436 The Busiest City (树形DP)
- Java学习-将Vector转化为数组
- java 浅谈get与post的区别
- 剑指offer前10题
- JavaMail IMAPFolder.getMessageByUID 获取QQ和腾讯企业邮箱新邮件的问题
- Add Two Numbers
- springMVC编码过滤器只对post方法有效的解决方法
- 深入mysql并发插入优化详解
- POJ 2488 A Knight's Journey
- 自定义SeekBar细节记录
- tranlating embedding 算法的一些理解
- 507. Perfect Number
- java 无法显示收到的文本原因
- 转接口IC GM8914:FPD-LINK III转LVTTL芯片 DC 平衡双向控制解串器