美文网首页程序员
2. Add Two Numbers

2. Add Two Numbers

作者: Nautilus1 | 来源:发表于2017-11-02 10:06 被阅读0次

    题目描述:给两个用非空链表表示的非负整数,数字从低位到高位是从左到右排列的,每个节点只包含数的一位。将这两个数的链表加为一个返回。如:

    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
    Output: 7 -> 0 -> 8

    分析:模拟遍历两链表,时间复杂度O(n + m),空间O(n)。

    代码

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
            ListNode l(-1);
            int c = 0;
            ListNode *pre = &l;
            for (ListNode *pa = l1, *pb = l2; pa != nullptr || pb != nullptr; pa = pa == nullptr? nullptr : pa -> next, pb = pb == nullptr? nullptr : pb -> next, pre = pre -> next)
            {
                int ai = pa == nullptr? 0 : pa -> val;
                int bi = pb == nullptr? 0 : pb -> val;
                int v = (ai + bi + c) % 10;
                c = (ai + bi + c) / 10;
                pre -> next = new ListNode(v);
            }
            if (c > 0)
                pre -> next = new ListNode(c);
            
            return l.next;
        }
    };
    

    相关文章

      网友评论

        本文标题:2. Add Two Numbers

        本文链接:https://www.haomeiwen.com/subject/lntopxtx.html