Leetcode第二题_Add Two Numbers
来源:互联网 发布:java移植安卓游戏 编辑:程序博客网 时间:2024/05/29 14:30
Add Two Numbers Total Accepted: 58281 Total Submissions: 266931 My Submissions Question Solution
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
这一题应该算是比较简单的题目,题目大概的意思是给你两个链表,将这两个链表中对应位置的节点求和,如果该处和大于10则进位,然后输出和链表。
思路使用尾插法新建出一个和链表就可以了。思路是这么简单,但这一题却有许多特殊情况要考虑
- 一个链表长一个链表短的情况
- 最后一个节点处有进位的情况
- 不等长链表最后一个节点处有进位的情况
处理好这三种情况就差不多AC了。下面是代码:
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode temp = new ListNode(0);// 记录下头结点,尾插法构建和链表 ListNode head = temp;// 进位标记 int flag = 0; int delete = 0; while (l1!= null || l2!= null) {// 处理链表不等长 if (l1 == null) {// 处理进位 l2.val = l2.val+flag; flag = 0;// 处理不等长节点最后进位情况 if (l2.val >=10) { delete = -10; flag = 1; } ListNode l3 = new ListNode(l2.val+delete); delete = 0; temp.next = l3; temp = l3; l2 = l2.next; } else if (l2 == null) { l1.val = l1.val + flag; flag = 0; if (l1.val >=10) { delete = -10; flag = 1; } ListNode l3 = new ListNode(l1.val+delete); delete = 0; temp.next = l3; temp = l3; l1 = l1.next; } else { l1.val = l1.val + flag; flag = 0; if (l1.val+l2.val>=10) { delete = -10; flag = 1; } ListNode l3 = new ListNode(l1.val+l2.val+delete); delete = 0; temp.next = l3; temp = l3; l1 = l1.next; l2 = l2.next; }// 处理最后一个节点有进位情况 if (flag ==1 && l1 ==null && l2 ==null) { ListNode l3 = new ListNode(1); temp.next = l3; temp = l3; } } temp.next = null; return head.next; }
其实挺烦的,每刷一个题要2,3个小时,感觉好消耗时机。处理问题的时候总是考虑不全面,这些特例都是通过Leetcode给失败反馈找出来的,要是不给反馈,这些例子怎么找到的?肯定要花更长的时间。
真是烦,实习又没有找到,感觉自己欠缺的还挺多的,哎,时间都去哪了啊。
0 0
- Leetcode第二题_Add Two Numbers
- leetcode(2)_Add Two Numbers
- LeetCode 2_Add Two Numbers
- LeetCode 2_Add Two Numbers
- 【LeetCode】2_Add Two Numbers
- leetcode第一刷_Add Two Numbers
- LeetCode之2_Add Two Numbers
- 0002_Add Two Numbers
- 2_Add Two Numbers
- leetcode 第二题Add Two Numbers java
- Add Two Numbers LeetCode第二题
- leetcode第二题add two numbers
- leetcode第二题Add Two Numbers
- leetcode第二题<Add Two Numbers>
- C# LeetCode第二题 Add Two Numbers
- 第二题:Add Two Numbers
- 2_Add Two Number
- LeetCode第二关:Add Two Numbers --> Difficulty: Medium
- 辗转相除法求最大公约数
- jag2014autumn F Reverse a Road II 网络流
- HDU 5215 Cycle(判定无向图奇偶环)
- aSmack源码分析register过程分析
- Go语言周边常用命令积累
- Leetcode第二题_Add Two Numbers
- Leetcode21: Min Stack
- 神经网络(2)
- 算法之LCA与RMQ问题
- iOS8中使用CoreLocation定位
- LINUX ulimit命令 详解
- 神经网络(3)
- smack 源码分析一(android上实现长连接)【1】
- Json字符串和highcharts数据图表展现