leetcode 两数相加

leetcode 两数相加

老实人解法,不太推荐使用。
补齐最短的链表,然后逐位相加即可。

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

    struct ListNode {
     
      int val;
      struct ListNode *next;
    };

    struct ListNode *_l1,*_l2;
    _l1 = l1;
    _l2 = l2;
    int temp = 0;
    struct ListNode*ret,*l3;
    l3 = (struct ListNode *)malloc(sizeof(struct ListNode));
    l3->next = NULL;
    l3->val = NULL;
    ret = l3;
    /*将较短的链表补齐*/
    while(l1 != NULL && l2 != NULL){
     
       
        if(l1->next == NULL && l2->next != NULL){
     
            struct ListNode* p = (struct ListNode *)malloc(sizeof(struct ListNode));
            p->val = 0;
            p->next = NULL;

            l1->next = p;
        }else if(l1->next != NULL && l2->next == NULL){
       
            struct ListNode* p = (struct ListNode *)malloc(sizeof(struct ListNode));
            p->val = 0;
            p->next = NULL;
            l2->next = p;
        }
        l1 = l1->next;
        l2 = l2->next;
    }
    while(_l1 != NULL && _l2 != NULL){
     
        if(_l1->val + _l2->val + temp >= 10){
     
            struct ListNode* p = (struct ListNode *)malloc(sizeof(struct ListNode));
            p->val = (_l1->val + _l2->val) -10 +temp;
            p->next=NULL;
            
            l3->next = p;
            l3 = l3->next;
            temp = 1;
        }
        else{
     
            struct ListNode* p = (struct ListNode *)malloc(sizeof(struct ListNode));
            p->val = (_l1->val + _l2->val) +temp;
            p->next=NULL;
            l3->next = p;
            l3 = l3->next;
            temp = 0;
        }
        _l1 = _l1->next;
        _l2 = _l2->next;
    }
    /*查看最后一次相加 进位temp 是否为一*/
    if(temp == 1){
     
        struct ListNode* p = (struct ListNode *)malloc(sizeof(struct ListNode));
            p->val = 1;
            p->next=NULL;
            
            l3->next = p;
            l3 = l3->next;
    }
 return ret->next;
}

注意的一点应该是最后一个if判断。当最后两位相加产生进位时,应该补一个1。
写的仓促,老实说有点臃肿。以后有时间再改改。
执行时间:28 ms, 在所有 C 提交中击败了5.74%的用户
内存消耗:7.8 MB, 在所有 C 提交中击败了5.29%的用户
大家就看看,图一乐,告辞!

你可能感兴趣的:(leetcode,leetcode)