链表逆序表示一个数,然后两个数相加

题目描述

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

解法一

较为暴力的解法,将链表转换为int,然后相加,在将和转化为链表,在int转换为链表时,需要使用栈来辅助存储数字,之后栈弹出存储至链表,则实现了逆序。代码就不添出来了,较为简单。

解法二

较为标准的答案,使用进位来实现相加。碰到的主要问题是,在创建链表时,怎么保证正确开始,并且不是多输出和覆盖的问题:创建一个不为空的链表,返回结果为链表的next

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1 == null && l2 == null)
            return null;
        // int num1 = transfor(l1);
        // int num2 = transfor(l2);
        //ListNode node = intToNode(num1+num2);
        ListNode sum = new ListNode(0);
        ListNode p = l1,q = l2,m = sum;
        int i = 0;
        while(p != null || q != null || i > 0){
            int x = (p != null) ? p.val:0;
            int y = (q != null) ? q.val:0;
            m.next = new ListNode((x+y+i)%10);
            m = m.next;
            if(x+y+i >= 10){
                i = 1;
                
            }else{
                i = 0;
            }
            
            if(p != null)
                p = p.next;
            if(q != null)
                q = q.next;
        }
        return sum.next;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值