2.5

题目描述
有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。
测试样例:
{1,2,3},{3,2,1}
返回:{4,4,4}

package Chapter2;

public class Plus {
//    题目描述
//    有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
//    给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(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 还要再次循环判断呢!

大神们的做法是一次while判断a!=null && b!=null && counter != 0
代码比较简洁,思路是差不多了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容