Add Two Numbers

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
有两个链表作为输入,它们表示逆序的两个非负数。如下面的两个链表表示的是342465这两个数。你需要计算它们的和并且用同样的方式逆序输出。如342+465 = 807,你需要把结果表达为7 ->0 ->8
  1. 作为节点的话,就得先来个节点类了
public class ListNode {
            int val;
          ListNode next;
          ListNode(int x) { val = x; }

}
  1. 下面开始进行计算了哦
  2. 注意下进位就可以了,进位跟10除以一下就可以了。个位数还能上天呀,大于0 carry=1。注意下头指针。求了一个数的和之后,就得创造一个链表了哦。
public class Add_Two_Numbers {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int carry = 0;
        ListNode n1 = l1;
        ListNode n2 = l2;
        ListNode head = null;
        ListNode result = null;

        while (n1!=null || n2!=null) {
            int sum = carry;
            if (n1!=null) {
                sum += n1.val;
                n1 = n1.next;
            }
            if (n2!=null) {
                sum += n2.val;
                n2 = n2.next;
            }

            if (sum/10>0)
                carry = 1;
            else
                carry = 0;

            sum = sum % 10;

            ListNode item = new ListNode(sum);
            if (result==null) {
                head = item;
            }
            else {
                result.next = item;
            }
            result = item;
        }

        if (carry!=0)
            result.next = new ListNode(1);

        return head;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值