Leetcode_Add Two Numbers

来源:互联网 发布:ubuntu core 教程 编辑:程序博客网 时间:2024/06/04 17:56

地址:http://oj.leetcode.com/problems/add-two-numbers/
思路: 应该是道简单题,大数相加,用链表来封装一下(只要记录一下新建节点的地址就OK了)
代码写的太冗余了。。。


/** * 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) {        vector<int>vec;        int sum, carry = 0;        while(l1 && l2)        {            sum = l1->val + l2->val + carry;            if(sum >= 10)            {                vec.push_back(sum-10);                carry = 1;            }            else            {                vec.push_back(sum);                carry = 0;            }            l1 = l1->next;            l2 = l2->next;        }        if(l1)        {            while(l1)            {                sum = l1->val + carry;                if(sum >= 10)                {                    vec.push_back(sum-10);                    carry = 1;                }                else                {                    vec.push_back(sum);                    carry = 0;                }                l1 = l1->next;            }        }        else        {            while(l2)            {                sum = l2->val + carry;                if(sum >= 10)                {                    vec.push_back(sum-10);                    carry = 1;                }                else                {                    vec.push_back(sum);                    carry = 0;                }                l2 = l2->next;            }         }        if(carry)        {            vec.push_back(1);        }        ListNode* head;        vector<ListNode*> addrvec;        for(int i = 0; i < vec.size(); ++i)        {            if(i == 0)            {                head = new ListNode(vec[i]);            }            else            {                ListNode *p = new ListNode(vec[i]);                addrvec.push_back(p);            }        }        addrvec.push_back(NULL);        ListNode* lp = head;        for(int i = 0; i < vec.size(); ++i)        {            lp->next = addrvec[i];            lp = addrvec[i];        }        return head;    }};

SECOND TRIAL

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    int cnt_list_node(ListNode* head)    {        int cnt = 0;        while(head)        {            ++cnt;            head = head->next;        }        return cnt;    }    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {        if(!l1)            return l2;        if(!l2)            return l1;        int v = 0, carry = 0;        int c1 = cnt_list_node(l1);        int c2 = cnt_list_node(l2);        if(c1 < c2)            swap(l1, l2);        ListNode*p = l1, *pre = NULL;        while(l2)        {            pre = p;            v = p->val + l2->val + carry;            carry = v / 10;            v %= 10;            p->val = v;            p = p->next;            l2 = l2->next;        }        while(carry)        {            if(p)            {                pre = p;                v = p->val + carry;                carry = v/10;                v %= 10;                p->val = v;                p = p->next;            }            else            {                ListNode* nd = new ListNode(carry);                pre->next = nd;                return l1;            }        }        return l1;    }};


0 0
原创粉丝点击