小时代呵呵leetcode的day1之两数相加练习

题目:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和.
示例:

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

想法:
这地方就是链表的读取操作及相应的下标移位,进行非空判断。声明一个溢出位置用作下一个链表的额外参数。
额外说明:
leetcode上的示例代码好像并没有对两个链表的容量做判断,默认两个链表都是一样的,我稍微改动了一下,分别作了判断说明,下面是代码:

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode resultNode = new ListNode(0);
        /**这地方声明一个当前链表,进行赋值操作,返回返回的是resultNode 
        * 当时没声明这个标志位,害我吃了一点苦,哎。。。
        */
        ListNode currentNode = resultNode;
        //定义一个标志位
        int isOver = 0;
        int add = 0;
        while(l1 != null || l2 !=null){
           //l2链表走完但是l1链表没走完
            if(l2 == null && l1 != null){
                add = l1.val + isOver;
            }
            //l1链表走完但是l2链表没走完
            else if(l1 == null && l2 != null){
                add = l2.val + isOver;
            }else{
                add = l1.val + l2.val + isOver;
            }
            //判断两位数相加是不是溢出操作
            if(add >= 10){
                add = add % 10;
                isOver = 1;
            }else{
                isOver = 0;
            }
            currentNode.next = new ListNode(add);
            currentNode = currentNode.next;
            //开始进行指标下移
            l1 = (l1 != null)?l1.next:l1;
            l2 = (l2 != null)?l2.next:l2;          
        }
        //如果两个都是一样大小的容量,判断是不是存在相加存在溢出位置
        if(isOver > 0){
           currentNode.next = new ListNode(isOver); 
        }
        //头结点没用到。
        return resultNode.next;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值