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));
    }
}

结果如下:

上一篇下一篇

猜你喜欢

热点阅读