leetcode2 Java:两数相加

//给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 
//
// 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 
//
// 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 
//
// 示例: 
//
// 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
//输出:7 -> 0 -> 8
//原因:342 + 465 = 807
// 
// Related Topics 链表 数学

package leetcode.editor.cn;

//Java:两数相加
public class P2AddTwoNumbers{
    public static void main(String[] args) {
        //测试用例:2->4->3  5->6->4
        ListNode l1 = new ListNode(2);
        l1.next = new ListNode(4);
        l1.next.next = new ListNode(3);
        ListNode l2 = new ListNode(5);
        l2.next = new ListNode(6);
        l2.next.next = new ListNode(4);
        Solution solution = new P2AddTwoNumbers().new Solution();
        ListNode resListNode = solution.addTwoNumbers(l1, l2);
        //这里就打印了前三位
        System.out.println(resListNode.val + "->" + resListNode.next.val + "->" + resListNode.next.next.val);
    }
    //leetcode submit region begin(Prohibit modification and deletion)
    // Definition for singly-linked list.
    static class ListNode {
         int val;
         ListNode next;
         ListNode(int x) { val = x; }
        }
    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode newHead = new ListNode(0);
            ListNode p = l1, q = l2, curr = newHead;
            int carry = 0;
            while(p != null || q != null){
                int i = p == null ? 0 : p.val;
                int j = q == null ? 0 : q.val;
                int sum = carry + i + j;
                carry = (sum / 10);  //进位数
                curr.next = new ListNode(sum % 10);  //余数
                curr = curr.next;
                if(p != null){
                    p = p.next;
                }
                if(q != null){
                    q = q.next;
                }
            }
            if(carry > 0){
                curr.next = new ListNode(carry);
            }
            return newHead.next;
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值