2020-04-14(445. 两数相加 II**)

难度 中等
最近做题的速度提上来了,或许是因为知识点一点点拾回来了,不过总这样也不算好事,说明没有新的知识点出现。这道题需要把链表反转相加,我这里是直接反转了,用栈也可以,速度会更快一些,不过要牺牲一些空间。需要注意的还有一些细节,两数相加进位可能会连续进位,连续进位过程中l1或l2可能会被遍历完而为空,需要考虑到这一点。
执行用时 :3 ms, 在所有 Java 提交中击败了83.33%的用户
内存消耗 :39.7 MB, 在所有 Java 提交中击败了95.83%的用户

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        l1 = reverseList(l1);
        l2 = reverseList(l2);
        ListNode l3 = null;
        ListNode cur = null;
        int r = 0;
        while(l1 != null && l2 != null || r == 1){
            int sum = 0;
            if(l1 != null && l2 != null){
                sum = l1.val + l2.val + r;
                l1 = l1.next;
                l2 = l2.next;
            }else if(r == 1 && l1 != null){
                sum = l1.val + r;
                l1 = l1.next;
            }else if(r == 1 && l2 != null){
                sum = l2.val + r;
                l2 = l2.next;
            }else if(r == 1){
                sum = r;
            }

            r = sum/10;
            ListNode temp = new ListNode(sum%10);
            if(cur == null){
                l3 = temp;
                cur = temp;
            }else{
                cur.next = temp;
                cur = cur.next;
            }
        }
        if(l1 != null){
            cur.next = l1;
        }else if(l2 != null){
            cur.next = l2;
        }else{
            cur.next = null;
        }
        l3 = reverseList(l3);
        return l3;
    }

    public ListNode reverseList(ListNode l){
        ListNode cur = l;
        ListNode nTail = null;
        while(cur != null){
            ListNode nHead = new ListNode(cur.val);
            nHead.next = nTail;
            nTail = nHead;
            cur = cur.next;
        }
        l = nTail;
        return nTail;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容