2.5

題目描述
有兩個用鏈表表示的整數(shù),每個結(jié)點包含一個數(shù)位。這些數(shù)位是反向存放的,也就是個位排在鏈表的首部。編寫函數(shù)對這兩個整數(shù)求和,并用鏈表形式返回結(jié)果。
給定兩個鏈表ListNode* A,ListNode* B,請返回A+B的結(jié)果(ListNode*)。
測試樣例:
{1,2,3},{3,2,1}
返回:{4,4,4}

package Chapter2;

public class Plus {
//    題目描述
//    有兩個用鏈表表示的整數(shù),每個結(jié)點包含一個數(shù)位。這些數(shù)位是反向存放的,也就是個位排在鏈表的首部。編寫函數(shù)對這兩個整數(shù)求和,并用鏈表形式返回結(jié)果。
//    給定兩個鏈表ListNode* A,ListNode* B,請返回A+B的結(jié)果(ListNode*)。
//    測試樣例:
//    {1,2,3},{3,2,1}
//    返回:{4,4,4}
    public ListNode plusAB(ListNode a, ListNode b) {
       if(a == null && b == null){
           return null;
       }
       if(a == null){
           return b;
       }
       if(b == null){
           return a;
       }
       ListNode resultListNodeBegin=null;
       ListNode resultListNodeEnd=null;
       int counter=0;
       while(a != null){
           if(resultListNodeBegin == null){
               int result=a.val+b.val+counter;
                   int val=result%10;
                   counter=result/10;
                   resultListNodeBegin=new ListNode(val);
                   resultListNodeEnd=resultListNodeBegin;
           }else{
               if(b == null){
                   resultListNodeEnd.next=a;
                   resultListNodeEnd=a;
                   break;
               }
               int result=a.val+b.val+counter;
               int val=result%10;
               counter=result/10;
               ListNode tmp=new ListNode(val);
               resultListNodeEnd.next=tmp;
               resultListNodeEnd=tmp;
           }
           a=a.next;
           b=b.next;
       }
       if(counter == 1){
           if(b == null){
               ListNode last=new ListNode(1);
               resultListNodeEnd.next=last;
               resultListNodeEnd=last;
           }else{
               while(b != null){
                   int result=b.val+counter;
                   int val=result%10;
                   counter=result/10;
                   ListNode tmp=new ListNode(val);
                   resultListNodeEnd.next=tmp;
                   resultListNodeEnd=tmp;
                   b=b.next;
               }
               if(counter == 1){
                   ListNode last=new ListNode(1);
                   resultListNodeEnd.next=last;
                   resultListNodeEnd=last;
               }
           }

       }else{
           if(b == null){
           }else{
               resultListNodeEnd.next=b;
               resultListNodeEnd=b;
           }
       }
       return resultListNodeBegin;
    }
    public static void main(String[] args){
        ListNode a=ListNodeOperation.createListNode();
        ListNode b=ListNodeOperation.createListNode();
        ListNode ab=new Plus().plusAB(a,b);
        ListNodeOperation.printListNode(ab);

    }
}

需要注意的點:
a的鏈表取完之后 判斷b時不要忘了counter可能還等于1 還要再次循環(huán)判斷呢!

大神們的做法是一次while判斷a!=null && b!=null && counter != 0
代碼比較簡潔,思路是差不多了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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