[LeetCode
来源:互联网 发布:酷狗m1 知乎 编辑:程序博客网 时间:2024/06/17 13:13
1 问题
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
2 分析
本题目使用的算法是:模拟加法计算。题目中给定的条件以及要求的结果使用的数据结构都是链表,因此,算法中使用的数据结构也是链表。算法的描述如下:
ret=dummy head , 在链表中使用dummy head对于简化算法有很大作用。carry=0 用来表示加法计算中的进位 p,q 分别指向l1,l2 的head - 依次访问
l1 和l2 中的每一个元素,直到同时访问到l1,l2 的结尾为止:x=p节点的值 , 如果x 指向了l1 的结尾,那么x=0 y=q节点的值 , 如果y 指向了l2 的结尾,那么y=0 sum=x+y+carry 更新进位值:carry=sum/10 - 使用
sum 的值创建一个新节点,加入到ret节点的后面,将ret指向这个新创立的节点 - 将
p,q 分别指向l1,l2 的下一个节点。
- 完成循环后,检查carry是不是等于1,如果是,则再创建一个值为1的新的节点,加入到ret之后
- 将第一步创建的dummy head值返回。
该算法的时间复杂度
3 代码
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummyHead = new ListNode(0); ListNode p = l1, q = l2, curr = dummyHead; int carry = 0; while (p != null || q != null) { int x = (p != null) ? p.val : 0; int y = (q != null) ? q.val : 0; int sum = carry + x + y; carry = sum / 10; curr.next = new ListNode(sum % 10); curr = curr.next; if (p != null) p = p.next; if (q != null) q = q.next; } if (carry > 0) { curr.next = new ListNode(carry); } return dummyHead.next;}
0 0
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- leetcode
- 什么是RBA
- e.slice is not a function
- Oracle 10g中新的后台进程
- MVC 锚点
- Rank() OVER(PARTITION BY)用法
- [LeetCode
- Oracle开发方面的面试题
- SQL基础题目
- 数据库范式解析及应用实例
- Python--Numpy基础
- sqlplus遇到唯一约束是否还继续执…
- Vmstat命令详解
- 本地读取
- 表字段的顺序也会影响性能 Conside…