leetCode2:两数相加(链表)

题目:

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

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

思路:

  • 遍历两个链表,逐位相加,还要加上进位。
  • 结果要存在链表里,所以一个 head 链表记住链表头, 另一个 tail 链表往后遍历,存储相加的结果。
  • 第一个链表的值,加上第二个链表的值,再加上进位值,就是结果链表的节点数值。
    int sum = x+y+add;
    new ListNode(sum%10) 通过实例化节点,设置结果链表的节点数值。
  • 两个链表,都要向后迭代,这样才能逐位相加。

代码:

 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = null;
        ListNode tail = null;
        int add = 0;

        while (l1!=null || l2!=null) {
            int x =0;
            int y = 0;

            //思路:逐位相加,还要加上进位
            if (l1!=null) {
                x = l1.val;
            }
            if (l2!=null) {
                y = l2.val;
            }
		  //第一个链表的值,加上第二个链表的值,再加上进位值,就是结果
            int sum = x+y+add;

            if (head==null) {
                //head为null, 说明是刚开始遍历。 head 主要是用来记住结果的链表头
                // tail 也要初始化的
                // sum取余10,就是每一位的值
                tail = new ListNode(sum%10);
                head = tail;
            } else {
                //将相加的结果,放到 tail 里面。逐个填入
                tail.next = new ListNode(sum%10);
                //向后遍历
                tail = tail.next;
            }
            // sum除以10,就是要进位的值。
            add = sum/10;

            //两个链表,都要向后遍历
            if (l1!=null) {
                l1 = l1.next;
            }
            if (l2!=null) {
                l2 = l2.next;
            }

        }

        //最后,如果相加还有进位,要新建节点
        if ( add >0) {
            tail.next = new ListNode(add);
        }
        return head;



    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值