题目描述
有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
给定两个链表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; } }