2. 两数相加
2021-10-19 本文已影响0人
Abeants
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路及方法
递归解法,从头结点开始计算。计算到某一链表的结点为空时,按数值0计算。进位的判断是当和值大于等于10时,判断任一链表的下一结点是否为空,如果为空,下一结点按1计算;如果不为空,下一结点的值加1。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
// 进位标志
public int flag = 0;
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
if (l1 == null && l2 == null) return null;
// 空位按0相加
if (l1 == null) l1 = new ListNode(0);
if (l2 == null) l2 = new ListNode(0);
// 两数按位相加
int tmp = l1.val + l2.val;
if (tmp >= 10) {
tmp -= 10;
// 判断是否进位
if (l1.next == null) {
l1.next = new ListNode(1);
} else {
l1.next.val += 1;
}
}
return new ListNode(tmp, addTwoNumbers(l1.next, l2.next));
}
}
结果如下: