LeetCode OJ 第二题 Add Two Numbers (链表)

写的有些复杂了,还是太年轻。。。。


            str2 += l2->val;
            l2 = l2->next;
        }
        int size = min(str1.size(), str2.size());
        if(size == str1.size())   str = str2;
        else   str = str1;
        for(int i = 0; i < size; i++)
            str[i] = str1[i] + str2[i];
        str += 'A';
        int i = 0;
        int temp = 0;
        while(str[i] != 'A')
        {
            str[i] += temp;
            if(str[i] > 9)
            {
                temp = str[i] / 10;
                str[i] -= 10 * temp; 
            }
            else
                temp = 0;
            i++;
        }
        if(temp > 0)
        {
            str[str.size()-1] = temp;
            str += 'A';
        }
        ListNode* head = (ListNode*)malloc(sizeof(ListNode));
        ListNode* p1;
        ListNode* p2;
        for(int i = 0; i <= str.size()-2; i++)
        {
            if(i == 0)
            {
                head->val = str[i];
                p1 = head;
            }
            else
            {
                p2 = (ListNode*)malloc(sizeof(ListNode));
                p1->next = p2;
                p2->val = str[i];
                p1 = p2;
            }
            if(i == str.size()-2)   p1->next = NULL;
            
        }
        return head;  
        
    }
};

附上大神的代码一份

ListNode* Solution::addTwoNumbers(ListNode* l1, ListNode* l2)
{
    ListNode *result;
    ListNode *dump = new ListNode((int)0);
    ListNode **sum = &result;
    int carry = 0;
    int now = 0;
    while(l1 != dump || l2 != dump || carry != 0)
    {
        now = (l1->val + l2->val + carry)%10;
        carry = (l1->val + l2->val + carry)/10;
        *sum = new ListNode(now);
        sum = &(*sum)->next;    
        if (l2->next == NULL)
            l2 = dump;
        else l2 = l2->next;
        if (l1->next == NULL)
            l1 = dump;
        else l1 = l1->next;
    }
    delete dump;
    return result;
}

猜你喜欢

转载自blog.csdn.net/WukongAKK/article/details/81487899