力扣2 Add Two Number 两数相加 medium 20220120

力扣2  Add Two Number medium
   题目描述:
       给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,                        并且每个节点只能存储 一位 数字。
       请你将两个数相加,并以相同形式返回一个表示和的链表。
       你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
   示例:
       输入:l1 = [2,4,3], l2 = [5,6,4]
       输出:[7,0,8]
       解释:342 + 465 = 807.

情形1:
 

情形2:

 情形3:

 情形4:

public class AddTwoNumber {

    public ListNode AddTwoNumber(ListNode l1,ListNode l2){
        //1.边界
        if (l1==null) return l2;
        if (l2==null) return l1;
        //进位标志
        int carry=0;
        //求和链表,dummy和prev初始化都指向第一个节点的上一个节点,dummy作为移动指针,prev作为标志指针
        ListNode dummy=new ListNode(0);
        ListNode prev=dummy;
        //l1和l2相同长度的各节点求和
        while (l1!=null&&l2!=null){
            int total=l1.val+l2.val+carry; //对应位相加,并加上进位
            int number=total%10; //取余,获取个位数
            carry=total/10; //进位数
            ListNode node=new ListNode(number);//新建求和节点
            dummy.next=node; //连接求和链表
            dummy=dummy.next;//移动指针
            l1=l1.next;
            l2=l2.next;
        }
        //l1比l2长的情况,求和链表要加上l1多出来的一段链表
        while (l1!=null){
            int total=l1.val+carry; //这个进位别漏掉
            int number=total%10; //取余,获取个位数
            carry=total/10; //进位数
            ListNode node=new ListNode(number);//新建求和节点
            dummy.next=node; //连接求和链表
            dummy=dummy.next;//移动指针
            l1=l1.next;
        }
        //l2比l1长的情况,求和链表要加上l2多出来的一段链表
        while (l2!=null){
            int total=l2.val+carry; //这个进位别漏掉
            int number=total%10; //取余,获取个位数
            carry=total/10; //进位数
            ListNode node=new ListNode(number);//新建求和节点
            dummy.next=node; //连接求和链表
            dummy=dummy.next;//移动指针
            l2=l2.next;
        }
        //l1和l2长度一致情况,最后节点求和后可能有进位,也要加上
        if (carry!=0){
            ListNode node=new ListNode(carry);
            dummy.next=node;
        }
        return prev.next;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值