public static ListNode addTwoNumbers(ListNode head1, ListNode head2) {
int len1 = getListLen(head1);
int len2 = getListLen(head2);
ListNode l = len1 > len2 ? head1 : head2;
ListNode s = l == head1 ? head2 : head1;
//l为长链表 s为短链表;
ListNode curL = l;
ListNode curS = s;
ListNode last = curL;
//carry为进位 curNum为计算出的数值;
int carry = 0;
int curNum = 0;
//第一阶段;
while (curS != null) {
curNum = curL.val + curS.val + carry;
carry = curNum / 10;
curL.val = curNum % 10;
//该位处理完成;curNum重新置0;
last = curL;
curNum = 0;
curL = curL.next;
curS = curS.next;
}
//第二阶段;
while (curL != null) {
curNum = curL.val + carry;
carry = curNum / 10;
curL.val = curNum % 10;
//处理完成;
last = curL;
curNum = 0;
curL = curL.next;
}
//第三阶段;(查看进位)
//如果进位是1;
if(carry!=0){
curL.next = new ListNode(1);
}
//将长链表的header返回;
return l;
}
/**
* 计算链表的长度;
*/
public static int getListLen(ListNode head) {
int length = 0;
while (head != null) {
length++;
head = head.next;
}
return length;
}