leetcode题目-第二题 两数相加

leetcode-cn.com(领扣),一个不错的代码练习网站

第二题    https://leetcode-cn.com/problems/add-two-numbers/description/


打败53%选手


题目:


给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807


我的答案:


/**
* 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)
    {  
        int a=0;
        ListNode *outop = (ListNode *)malloc(sizeof(ListNode));
        ListNode *out = outop;
        ListNode *p1 = l1;
        ListNode *p2 = l2;  
        
        while(p1 != NULL && p2 != NULL)
        {
            out->val = ((p1->val)+(p2->val)+a)%10;
            a= ((p1->val)+(p2->val)+a)/10;
            p1=p1->next;
            p2=p2->next;
            out->next = (ListNode *)malloc(sizeof(ListNode));
            out=out->next;out->next=NULL;
        }
        while(p1!=NULL&&p2==NULL)
        {
            out->val=(p1->val+a)%10;
            a=(p1->val+a)/10;
            out->next = (ListNode *)malloc(sizeof(ListNode));
            out=out->next;out->next=NULL;
            p1 = p1->next;
        }
        while(p1==NULL&&p2!=NULL)
        {
            out->val=(p2->val+a)%10;
            a=(p2->val+a)/10;
            out->next = (ListNode *)malloc(sizeof(ListNode));
            out=out->next;out->next=NULL;
            p2= p2->next;
        }
        if(a != 0){out->val = a;out->next = NULL;}
        else
        {
            out = outop;
            while(out->next->next!=NULL)
            {out=out->next;} 
            if(out->next->next==NULL){out->next=NULL;}
        }
        return outop;
    }
};


打赏

暂无评论

发布评论