* LeetCode【2】. Add Two Numbers--java实现
来源:互联网 发布:java web项目开发案例 编辑:程序博客网 时间:2024/06/02 08:57
第二道题
Add Two Numbers
如下:You are given two linked lists representing two non-negative numbers. 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.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
简单来说,给两个单向链表,元素反向相加并以同样规则进行储存。注意进位!
一下是我的java程序:
一、常规做法:逐一抽取计算,并考虑其中某个到达链尾的情况。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(in x) { val = x; } * } */public class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode slist = new ListNode(0); ListNode clist = slist; ListNode nlist = new ListNode(0); //int sval = 0; int flag = 0; // 进位 //1. if First Node of l1 or l2 is null if(l1==null||l2==null){ return (l1==null)?((l2==null)?(slist):(l2)):(l1); } //2.1 当l1,l2都非链尾时,loop while(true) { clist.val = (l1.val + l2.val + flag)%(10); flag = (l1.val + l2.val + flag)/10; //next node l1 = l1.next; l2 = l2.next; //2.1.1 若任意一个为链尾,则跳出 if(l1==null||l2==null){ break; }else{ clist.next= new ListNode(0); clist =clist.next; } };//while //2.2 如果两个同时为链尾时 if(l1==null&&l2==null) { //2.2.1 若两个为链尾且有进位,结果需进位 if(flag==1){ nlist = new ListNode(flag); clist.next = nlist; }else{ return slist; } }else //2.2 一个到达链尾、一个还未 { ListNode onelist = new ListNode(0); if(l1==null) {onelist = l2; }else {onelist = l1; } while(onelist!= null) { clist.next = new ListNode(0); clist = clist.next; clist.val = (onelist.val + flag)%10; flag = (onelist.val + flag)/10; onelist = onelist.next; } //2.2.1 当另外一个也到达链尾,判断是否有进位 if(flag==1) { clist.next = new ListNode(flag); } } return slist; }}
二、思路清晰的做法:将链表先读取为数值类型,相加后再将结果转为规定链表。该方法思路十分清晰简单,但是要逐一是否会溢出,时间及空间复杂度增加等问题。
三、此处有更好更简洁的解决方案供参考::Leetcode – Add Two Numbers (Java)。该方法分别判断两个链表是否到链尾了。就不需要像一那样考虑多种情况,似乎很多问题都可以有将各种情况统一的方式。下次做之前要多思考是否有这种方式。
1 0
- * LeetCode【2】. Add Two Numbers--java实现
- LeetCode-java实现-T2-Add Two Numbers
- LeetCode java实现Add Two Numbers
- LeetCode--Add Two Numbers的java实现
- [LeetCode][2]Add Two Numbers解析 -Java实现
- [LeetCode][2 Add Two Numbers][medium]Java实现
- LeetCode(2) Add Two Numbers实现
- [LeetCode Java] 2 Add Two Numbers
- 【leetcode with java】2 Add Two Numbers
- Leetcode 2 Add Two Numbers Java
- LeetCode 2 - Add Two Numbers ( JAVA )
- [LeetCode-2]Add Two Numbers(java)
- leetcode#2-Add Two Numbers-java
- [Leetcode] Add Two Numbers (Java)
- Add Two Numbers LeetCode Java
- 【Leetcode】Add two numbers JAVA
- Leetcode Java Add Two Numbers
- Java Leetcode Add Two Numbers
- 文件操作设定路径的一些注意
- BZOJ 1123: [POI2008]BLO
- mysql connector c++ release 版本控制台编译问题
- 搜狗输入法全/半角快速切换
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- * LeetCode【2】. Add Two Numbers--java实现
- 实例讲解虚拟机3种网络模式(桥接、nat、Host-only)
- AS模拟器(mac)
- orcle 11g 密码延迟验证害死人
- 转载:海量数据处理
- 系列文章-反病毒新视野
- 【安卓笔记】崩溃日志收集
- 简易SHA1函数(JavaScript实现)
- Union-Find 并查集