[LeetCode]002-AddTwoNumber

Problem:

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

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

Subscribe to see which companies asked this question

Solution(1)
第一次做的时候的答案:

ListNode* addTwoNumbers(ListNode* l1,ListNode* l2)
    {

        ListNode* result = new ListNode(0);
        ListNode* temp;
        ListNode* tml1;
        ListNode* tml2;
        vector<int> tl1;
        vector<int> tl2;
        int n,i,r,x,count;
        tml1 = l1;
        tml2 = l2;
        while(tml1 != NULL)
        {
            tl1.push_back(tml1->val);
            tml1 = tml1->next;
        }
        while(tml2 != NULL)
        {
            tl2.push_back(tml2->val);
            tml2 = tml2->next;
        }

        if(tl1.size() > tl2.size())
        {
            n = tl1.size() - tl2.size();
            while(n--)
            {
                tl2.insert(tl2.end(),0);
            }
        }
        else
        {
            n = tl2.size() - tl1.size();
            while(n--)
            {
                tl1.insert(tl1.end(),0);
            }
        }
        n = tl1.size();
        count = n;
        i = 0;
        x = 0;
        temp = result;
        while(n--)
        {
            r = tl1[i] + tl2[i] + x;
            if(r<10)
            {
                x = 0;
                temp->val = r;
            }
            else
            {
                x = 1;
                temp->val = r-10;
            }

            if(i == count-1 && x == 1 ) //最后一位,且有进位
            {
                temp->next = new ListNode(0);
                temp = temp->next;
                temp->val = 1;
            }   
            if(i < count - 1)
            {
                temp->next = new ListNode(0);
                temp = temp->next;
            }
            i++;
        }
        return result;
    }

Solution(2):
参考了网上的答案后:

ListNode* addTwoNumbers(ListNode* l1,ListNode* l2)
    {
        int cou = 0;
        ListNode* result = new ListNode(0);
        ListNode* temp;
        temp = result;
        while(l1 !=NULL || l2 != NULL)
        {
            int val1 = 0;
            if(l1 != NULL)
            {
                val1 = l1->val;
                l1 = l1->next;
            }
            int val2 = 0;
            if(l2 != NULL)
            {
                val2 = l2->val;
                l2 = l2->next;
            }

            int sum = val1 +val2 + cou;
            if(sum < 10)
            {
                cou = 0;
                temp->next = new ListNode(sum);
                temp = temp->next;
            }
            else
            {
                cou = 1;
                temp->next = new ListNode(sum - 10);
                temp = temp->next;
            }
        }
        if(cou == 1)
        {
            temp->next = new ListNode(1);
        }
        return result->next;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值