[LeetCode] Add Two Numbers

来源:互联网 发布:医美缩小毛孔知乎 编辑:程序博客网 时间:2024/06/08 05:10



这题并不难,简单的链表知识而已,被列为是Medium其实有点高看了。整体只有一个要注意的点,就是在于当所有链表节点都被遍历过了,但是还有进位不为0时,应该在最后补一个进位的节点。当n是节点的个数时,时间复杂度为O(n)。


下面贴上代码,这题算法改进的空间并不大,可能能写的更优雅,但是我看了一圈discuss,时间复杂度不可能会低于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 *t1 = l1;        ListNode *t2 = l2;        ListNode *ans = new ListNode(0);        ListNode *temp = ans;        int sum = 0;        int carry = 0;        while (t1 || t2 || carry) {            sum = carry;            if (t1 != NULL) {                sum += t1->val;                t1 = t1->next;            }            if (t2 != NULL) {                sum += t2->val;                t2 = t2->next;            }            carry = sum / 10;            temp->next = new ListNode(sum % 10);            temp = temp->next;        }        return ans->next;    }};


原创粉丝点击