【leetcode】第2题 C++

题目:

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

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

【自己写的版本】:比较垃圾。。。所以后面看了官方的又写了改进版

/**
 * 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) { 
        ListNode* NewLink=new ListNode(0);
        ListNode* NewLinkRear=NewLink;
        int add=0;
        while(l1!=NULL&&l2!=NULL){
            if(NewLinkRear->next!=NULL)
            {NewLinkRear=NewLinkRear->next;}
            
            NewLinkRear->val=l1->val+l2->val+add;
            ListNode* newnode=new ListNode(0);
            NewLinkRear->next=newnode;
            if(NewLinkRear->val>=10){
                add=1;
                NewLinkRear->val%=10;  
            }else{
                add=0;  
            }
            l1=l1->next;
            l2=l2->next;     
    };   
        if(l1==NULL&&l2!=NULL){
            NewLinkRear->next=l2;
            while(add){ 
                l2->val+=1;
                l2->val>=10?add=1:add=0;
                l2->val%=10; 
                if(l2->next!=NULL){
                    l2=l2->next;
                }else{
                    if(add){
                ListNode* AddNode=new ListNode(0);
                AddNode->val=add;
                l2->next=AddNode;
                add=0;
                   }else{
                 l2->next=NULL;
                  }
                }
            }
        }else if(l1!=NULL&&l2==NULL){
            NewLinkRear->next=l1;
            while(add){ 
                l1->val+=1;
                l1->val>=10?add=1:add=0;
                l1->val%=10; 
                if(l1->next!=NULL){
                    l1=l1->next;
                }else{
                    if(add){
                ListNode* AddNode=new ListNode(0);
                AddNode->val=add;
                l1->next=AddNode;
                add=0;
                   }else{
                 l1->next=NULL;
                  }
                }
            }
            
        }else{
            if(add){
                ListNode* AddNode=new ListNode(0);
                AddNode->val=add;
                 NewLinkRear->next=AddNode;
                add=0;
            }else{
                 NewLinkRear->next=NULL;
            }
           
        }
        
       return  NewLink;      
};
    
       
    
};

【参考官方后写的改进版】:

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { 
        ListNode* NewLink=new ListNode(0);
        ListNode* NewLinkRear=NewLink;
        int add=0;
        while(l1!=NULL||l2!=NULL){
            int val1=l1==NULL?0:l1->val;
            int val2=l2==NULL?0:l2->val;
                
            if(NewLinkRear->next!=NULL)
            {NewLinkRear=NewLinkRear->next;}
            
            NewLinkRear->val=val1+val2+add;NewLinkRear->val>=10?add=1:add=0;
            ListNode* newnode=new ListNode(0);
            NewLinkRear->next=newnode;
            NewLinkRear->val%=10; 
            
            if(l1!=NULL) l1=l1->next;
            if(l2!=NULL) l2=l2->next;     
    };   
        if(add){
            ListNode* newnode=new ListNode(1);
            NewLinkRear->next=newnode;
        }else{
            NewLinkRear->next=NULL;
        }
       
        
       return  NewLink;      
};
        
};

猜你喜欢

转载自blog.csdn.net/transformed/article/details/83545832