导航

9.链式A+B

Posted on 2015-08-25 22:10  骄阳照林  阅读(204)  评论(0编辑  收藏  举报

题目描述

有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。

给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。

测试样例:
{1,2,3},{3,2,1}
返回:{4,4,4}

代码如下:
import java.util.*;
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Plus {
    public ListNode plusAB(ListNode a, ListNode b) {
            int len1=0,len2=0;
         ListNode p=a,q=b,c=null;
          while(p!=null){
              len1++;
              p=p.next;
              
           }
          while(q!=null){
              len2++;
              q=q.next;
              
           }
         p=a.next;q=b.next;
          int value=(a.val+b.val)%10;
          int carry=(a.val+b.val)/10;
          if(len1>=len2){
              c=a;
          }else{
              c=b;
          }
          c.val=value;
          ListNode tmp=c.next;
          ListNode flag=c;
          while(p!=null && q!=null){
        	  int m=(p.val+q.val+carry)/10;
        	  int n=(p.val+q.val+carry)%10;
              carry=m;
              tmp.val=n;
              if(tmp.next==null) flag=tmp;
              tmp=tmp.next;
              p=p.next;
              q=q.next;
          }
         if(p!=null){
             while(p!=null){
                  tmp.val=(p.val+carry)%10;
                  carry=(p.val+carry)/10;
                  if(tmp.next==null) flag=tmp;
                  tmp=tmp.next;
                  p=p.next;
              }
             
         }else if(q!=null){
             while(q!=null){
                  tmp.val=(q.val+carry)%10;
                  carry=(q.val+carry)/10;
                  if(tmp.next==null) flag=tmp;
                  tmp=tmp.next;
                  q=q.next;
              }
             
         }
          if (carry==1){
                 ListNode newE=new ListNode(1);
                 newE.next=null;
                 flag.next=newE;
             }
       return c;
       
         
            
    }
}