两数相加

题目描述
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
题解
由于各自的位数是按照逆序的方式存储的,所以我们只要一位一位进行加法就可以了,同时考虑溢出的情况,使用进位 carry 来表示。
对于两个相加的链表,可能出现长度不一样的情况,这个时候,我们只要处理长的链表,单独加此链表的值即可。
折叠代码块JAVA
复制代码
1 | public ListNode addTwoNumbers(ListNode l1, ListNode l2) { |
另外一种处理两个链表长度不一样的方法就是,我们就将短的链表补0,继续与长的链表相加即可。
折叠代码块JAVA
复制代码
1 | public ListNode addTwoNumbers(ListNode l1, ListNode l2) { |
复杂度分析
- 时间复杂度:Ο(max(m,n)),假设 m 和 n 分别表示 l1 和 l2 的长度,上面的算法最多重复 max(m,n) 次。
- 空间复杂度:Ο(max(m,n)),新列表的长度最多为 max(m,n) + 1。
来源
文章标题:两数相加
文章作者:cylong
文章链接:https://0skyu.cn/posts/7cf2.html
有问题或者建议欢迎在下方评论。欢迎转载、引用,但希望标明出处,感激不尽(●’◡’●)
- 本文标题:两数相加
- 创建时间:2019-11-25 15:17:27
- 本文链接:https://netlify.076666.xyz/posts/7cf2
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
复制版权信息