167. 鏈表求和

你有兩個(gè)用鏈表代表的整數(shù),其中每個(gè)節(jié)點(diǎn)包含一個(gè)數(shù)字。數(shù)字存儲(chǔ)按照在原來整數(shù)中相反的順序,使得第一個(gè)數(shù)字位于鏈表的開頭。寫出一個(gè)函數(shù)將兩個(gè)整數(shù)相加,用鏈表形式返回和。
樣例
給出兩個(gè)鏈表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null

相加,并記錄進(jìn)位情況

這個(gè)沒有什么難的,從頭開始是個(gè)位,然后十位,百位……以此類推,要用一個(gè)變量來記錄進(jìn)位情況,這種相加進(jìn)位最多進(jìn)1,然后就是,當(dāng)一個(gè)鏈表加到頭就停止(注意處理進(jìn)位),然后再處理沒有加完的那個(gè)鏈表,處理完之后然后再看有沒有進(jìn)位,有的話放在鏈表最后,鏈表也寫了很久了,這種操作一定要熟練:
雖然很長(zhǎng),但是基本的處理套路都在第一個(gè)循環(huán)里了,看看就可以了。

 ListNode * addLists(ListNode * l1, ListNode * l2) {
        // write your code here
        ListNode *head=new ListNode(0);   //存放結(jié)果
        ListNode *first;
        first=head;           //假的表頭,主要是把這個(gè)地址存起來,這個(gè)不動(dòng)
        if(l1==NULL)  return l2;
        if(l2==NULL)  return l1;
        int res=0;
        int jinwei=0;
        while(l1!=NULL&&l2!=NULL)  
        {
            res=l1->val+l2->val+jinwei;    //當(dāng)前位求和
            if(res>9)               //如果有進(jìn)位,算出來。
            {
                res%=10;      //取余數(shù)
                jinwei=1;     //進(jìn)位是1
            }
            else
            jinwei=0;          //進(jìn)位置零
            
            ListNode *temp=new ListNode(res);   //生成一個(gè)新節(jié)點(diǎn)
            head->next=temp;         //連接到head上
            head=head->next;       //head向后移動(dòng)
            
            l1=l1->next;         //兩個(gè)鏈表向后移動(dòng)
            l2=l2->next;
        }
        
        
        
        while(l1!=NULL)       //如果l1比較長(zhǎng)
        {
            res=l1->val+jinwei;
            if(res>9)      //處理最后還有進(jìn)位的情況
            {
                res%=10;
                jinwei=1;
            }
            else 
            jinwei=0;
        
            ListNode *temp=new ListNode(res);
            head->next=temp;         //連接到head上
            head=head->next;       //head向后移動(dòng)
            
            l1=l1->next;         //兩個(gè)鏈表向后移動(dòng)
        }
        
         while(l2!=NULL)      //如果l2比較長(zhǎng)
        {
            res=l2->val+jinwei;
            if(res>9)
            {
                res%=10;
                jinwei=1;
            }
            else 
            jinwei=0;
            
            
            ListNode *temp=new ListNode(res);
            head->next=temp;         //連接到head上
            head=head->next;       //head向后移動(dòng)
            
            l2=l2->next;         //兩個(gè)鏈表向后移動(dòng)
        }
        
        cout<<jinwei<<endl;
        
        if(jinwei==1)          //最后還有進(jìn)位的話
        {
            ListNode *temp=new ListNode(jinwei);
            jinwei=0;
            head->next=temp;         //連接到head上
            head=head->next;       //head向后移動(dòng)
        }
        return  first->next;
    
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 我是小小強(qiáng),這是我的第8篇原創(chuàng)文章,閱讀需要大約10分鐘。 題目 LintCode:鏈表求和 描述 你有兩個(gè)用鏈表...
    我叫小小強(qiáng)閱讀 1,032評(píng)論 0 0
  • 題目 描述 你有兩個(gè)用鏈表代表的整數(shù),其中每個(gè)節(jié)點(diǎn)包含一個(gè)數(shù)字。數(shù)字存儲(chǔ)按照在原來整數(shù)中相反的順序,使得第一個(gè)數(shù)字...
    悠揚(yáng)前奏閱讀 161評(píng)論 0 0
  • 你有兩個(gè)用鏈表代表的整數(shù),其中每個(gè)節(jié)點(diǎn)包含一個(gè)數(shù)字。數(shù)字存儲(chǔ)按照在原來整數(shù)中相反的順序,使得第一個(gè)數(shù)字位于鏈表的開...
    jova_y閱讀 227評(píng)論 0 1
  • 分析 注意進(jìn)位
    胡哈哈哈閱讀 504評(píng)論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評(píng)論 18 399