给出两个非空的有向链表代表两个非负整数
整数中每个数字以倒序形式存储在有向链表中
将两链表相加并返回相加结果的链表
例子:
输入:(2->4->3)+(5->6->4)
输出:7->0->8
含义:243+564=708
方法一:使用递归
1 | /** |
复杂度分析:
时间复杂度:$O(max(m,n))$
空间复杂度:$O(max(m,n))$
方法二:使用while循环
算法:
- 初始化返回链表的初始节点(初始节点为空);
- 将余数carry初始化为0;
- 定义p、q分别为链表l1和l2的当前节点;
- 循环l1和l2直到二者均为空;
- 定义x为节点p的值,如果节点p为当前链表结尾,将其设为0;定义y为节点q的值,如果节点q为当前链表结尾,将其设为0;
- 令sum = x + y + carry,则carry = sum / 10;
- 初始化一个新的节点,其val为sum % 10,将其设为当前节点的next节点;
- 更新p、q为l1、l2的下一节点;
- 循环结束后如果carry大于0,则将其作为一个新节点加入到返回链表的最后;
- 返回初始节点的下一个节点。
1 | /** |
复杂度分析:
时间复杂度:$O(max(m,n))$
空间复杂度:$O(max(m,n))$