【题目】

将链表组成的数相加

leetcode2变式,2题是高位在后,现在是高位在前节点

You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

 

Example 1:

Input: l1 = [7,2,4,3], l2 = [5,6,4]
Output: [7,8,0,7]

Example 2:

Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [8,0,7]

Example 3:

Input: l1 = [0], l2 = [0]
Output: [0]

 

 

【思路】

链表反转,转换成leetcode2链表倒序相加即可

反转:https://www.cnblogs.com/inku/p/15211126.html

相加:https://www.cnblogs.com/inku/p/15210210.html

也可以用stack,不过耗时

 

【代码】

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        l1=reverse(l1);
        l2=reverse(l2);
        ListNode ans=new ListNode();
        ListNode pans=ans;
        int cnt=0;
        while (l1!=null||l2!=null){
            int sum=(l1==null?0:l1.val)+(l2==null?0:l2.val)+cnt;
            ans.next=new ListNode(sum%10);
            ans=ans.next;
            cnt=sum/10;
            if(l1!=null)
                l1=l1.next;
            if(l2!=null)
                l2=l2.next;
        }
        if(cnt>0)
            ans.next=new ListNode(cnt);
        return reverse(pans.next);
    }
    
    public  ListNode reverse(ListNode l){
        ListNode cur=l;
        ListNode next=l;
        ListNode pre=null;
        while(cur!=null){
            next=cur.next;
            cur.next=pre;
            pre=cur;
            cur=next;
        }
        return pre;
    }
}

 

用耗时的stack

 public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        Stack<Integer> s1=new Stack<>();
        Stack<Integer> s2=new Stack<>();
        Stack<Integer> s3=new Stack<>();
        ListNode tmp=new ListNode(0);
        ListNode ans=tmp;
        while(l1!=null){
            s1.push(l1.val);
            l1=l1.next;
        }
        while(l2!=null){
            s2.push(l2.val);
            l2=l2.next;
        }
        int cnt=0;
        while (!s1.isEmpty()||!s2.isEmpty()){
            if(s1.isEmpty())
                s1.push(0);
            if(s2.isEmpty())
                s2.push(0);
            int sum=s1.pop()+s2.pop()+cnt;
            cnt=sum/10;
            s3.push(sum%10);

        }
        if(cnt>0)
            s3.push(cnt);

        while (!s3.isEmpty()){
            tmp.next=new ListNode(s3.pop());
            tmp=tmp.next;
        }

        return ans.next;
    }

 

 posted on 2021-08-31 17:11  alau  阅读(59)  评论(0编辑  收藏  举报