算法

两个链表相加

2020-10-20  本文已影响0人  小鱼嘻嘻

问题1

给出两个 非空 的链表用来表示两个非负的整数。l1 = 1->3->4 , l2 = 1->7->4
相加结果为:l = 2->0->9, 可以简单理解为从左向右相加。

原理

代码

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1==null){
            return l2;
        }
        if(l2==null){
            return l1;
        }
        ListNode newHead = new ListNode(-1);
        ListNode run = newHead;
        int count = 0;
        while(l1!=null||l2!=null){
            int v1 = 0;
            if(l1!=null){
                v1 = l1.val;
                l1 = l1.next;
            }
            int v2 = 0;
            if(l2!=null){
                v2 = l2.val;
                l2 = l2.next;
            }
            run.next = new ListNode((v1+v2+count)%10);
            run = run.next;
            count = (v1+v2+count)/10;
        }
        if(count!=0){
            run.next = new ListNode(count);
        }
        return newHead.next;
    }
}

注意事项

问题2

给出两个 非空 的链表用来表示两个非负的整数。l1 = 1->3->4 , l2 = 1->7->4
相加结果为:l = 3->0->8 可以简单理解为从右向左相加。

原理

代码

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1==null){
            return l2;
        }
        if(l2==null){
            return l1;
        }
        ListNode newHead = new ListNode(-1);
        ListNode run = newHead;
        int count = 0;
        Stack<ListNode> stack1 = new Stack<>();
        while(l1!=null){
            stack1.add(l1);
            l1 = l1.next;
        }

        Stack<ListNode> stack2 = new Stack<>();
        while(l2!=null){
            stack2.add(l2);
            l2 = l2.next;
        }

        while(!stack1.isEmpty()||!stack2.isEmpty()){
            int v1 = 0;
            if(!stack1.isEmpty()){
                v1 = stack1.pop().val;
            }
            int v2 = 0;
            if(!stack2.isEmpty()){
                v2 = stack2.pop().val;
            }
            ListNode cur = new ListNode((v1+v2+count)%10);
            cur.next = run.next;
            run.next = cur;

            count = (v1+v2+count)/10;
        }

        if(count!=0){
            ListNode cur = new ListNode(count);
            cur.next = run.next;
            run.next = cur;
        }

        return newHead.next;

    }
}

注意事项

上一篇下一篇

猜你喜欢

热点阅读