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

两个数相加

题目描述

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

解法一

较为暴力的解法,将链表转换为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;
    }

猜你喜欢

转载自blog.csdn.net/xiangyuezaidongmo/article/details/89026759