首页 > 其他 > 详细

链表两数相加(add two numbers)

时间:2019-05-05 17:04:31      阅读:131      评论:0      收藏:0      [点我收藏+]

问题

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

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

解答

我们使用变量来跟踪进位,并从包含最低有效位的表头开始模拟逐位相加的过程。

代码

public class AddTwoNumbers {

    private class ListNode{
        int val;
        ListNode next;
        ListNode(int x){this.val=x;}
    }

    /**
     * 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
     * 输出:7 -> 0 -> 8
     * 原因:342 + 465 = 807
     *
     * @param l1
     * @param l2
     * @return
     */
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode sumNode = new ListNode(0);
        ListNode p1=l1,p2=l2,curr = sumNode;
        int carry = 0;
        while (p1!=null||p2!=null){
            int x = p1==null?0:p1.val;
            int y = p2==null?0:p2.val;
            int sum = carry+x+y;
            carry = sum/10;
            curr.next = new ListNode(sum%10);
            curr = curr.next;
            if(p1!=null) p1 = p1.next;
            if(p2!=null) p2 = p2.next;
        }
        if (carry>0){
            curr.next = new ListNode(carry);
        }

        return  sumNode.next;
    }
}

链表两数相加(add two numbers)

原文:https://www.cnblogs.com/walkinhalo/p/10813945.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!