Leetcode StringSum & LinkList Sum

class Solution {
public:
    string addBinary(string a, string b) {
        reverse(a.begin(),a.end());
        reverse(b.begin(),b.end());
        string a1,a2;
        if(a.length()>=b.length())
        {
            a1=a;
            a2=b;
        }
        else
        {
            a1=b;
            a2=a;
         }
         string c=a1;//此处必须是a1
         int flag=0;
        for(int i=0;i<a2.length();i++)
        {
           
           c[i]=a1[i]+a2[i]-'0'-'0'+flag;
           if(c[i]>=2)
           {
             flag=1;
             c[i]=c[i]+'0'-2;
           }
           else {c[i]=c[i]+'0';flag=0;}
        }
        for(int j=a2.length();j<a1.length();j++)
        {
            c[j]=a1[j]-'0'+flag;
            if(c[j]>=2)
           {
             flag=1;
             c[j]=c[j]+'0'-2;
           }
           else {c[j]=c[j]+'0';flag=0;}
        }
        if(flag==1)c+='1';
        reverse(c.begin(),c.end());
        return c;        
    }
};

 LinkList Sum

不能调用构造函数创造新结点,会发生隐式转换。所以只能采用原来的结点。不使用翻转链表,会造成超时。

/**
 * 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) {
        assert(l1!=NULL&&l2!=NULL);
        ListNode *p,*q;
        int n1=0,n2=0;
        for(p=l1;p;p=p->next)
        n1++;
        for(q=l2;q;q=q->next)
        n2++;
        if(n1<n2)
        {
        ListNode *temp=l1;
        l1=l2;
        l2=temp;
        }
        q=l1;
        for(p=l2;p;p=p->next)
        {
           q->val=p->val+q->val;
           q=q->next;
        }
        l2->next=NULL;//只能置为null
        l2->val=0;//初始值0
        for(q=l1;q;q=q->next)
        {
           if(q->val>=10)
           {
               if(q->next==NULL)
               {
                   q->next=l2;
               }              
               q->val-=10;
               q->next->val+=1;
           }
        }
        return l1;
    }
};
        
原文地址:https://www.cnblogs.com/tgkx1054/p/3025000.html