剑指 Offer II 025. 链表中的两数相加
给定两个 非空链表 l1
和 l2
来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例1:
1 | 输入:l1 = [7,2,4,3], l2 = [5,6,4] |
示例2:
1 | 输入:l1 = [2,4,3], l2 = [5,6,4] |
示例3:
1 | 输入:l1 = [0], l2 = [0] |
提示:
- 链表的长度范围为
[1, 100]
0 <= node.val <= 9
- 输入数据保证链表代表的数字无前导 0
思路:
按照平常加法的思路都是从个位相加,有进位则进到十位然后十位相加,以此类推。
对于链表也可以如此操作,但是我们没法对单链表从尾结点进行此种操作,所以需要对链表进行反转,然后相加即可。
步骤:
- 反转两个链表
- 将短链表后面进行补充值为0的节点至两链表长度相同
- 链表相加,针对进位需要设置进位标志位
- 最后一个节点需要单独判断,因为它的大小关乎着是否需要新增节点
- 将加和完的链表进行反转
代码实现:
1 | public ListNode addTwoNumbers(ListNode head1, ListNode head2) { |