ListNode两数相加:两个数相加起来,返回一个新的链表来表示它们的和

题目描述:

  • 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
  • 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
  • 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

  • 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807

代码示例:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        return add (l1, l2, 0);
    }
 
    public ListNode add(ListNode l1, ListNode l2, int a) {

        // 1.当l1与l2都为空且a大于0时则进行最后一位进a操作
        // 2.当l1与l2有一个为空时,则将为null的对象赋初值0操作
        if (l1 == null && l2 == null && a ==0) return null;

        if (l1 == null) l1 = new ListNode(0);

        if (l2 == null) l2 = new ListNode(0);
        
        int x = l1.val;
        int y = l2.val;
        int sum = x + y + a;
        // 表示十位数值
        a = sum / 10;
        // 保留个位数值给val变量
        ListNode result = new ListNode (sum % 10);
        // 递归调用
        result.next = add (l1.next, l2.next, a);
        return result;
    }
}

发布了65 篇原创文章 · 获赞 66 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44096448/article/details/104695324