【leetcode】第2題 C++
阿新 • • 發佈:2018-10-31
題目:
給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。
你可以假設除了數字 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; }; };