/**
* You are given two non-empty linked lists representing two non-negative integers.
* The digits are stored in reverse order and each of their nodes contain a single digit.
* Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
/**
* 考察链表
* @param l1
* @param l2
* @return
*/
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode ret=new ListNode(0);//链表头结点
ListNode lastNode=ret;//记录链表节点的最后一个节点,方便尾插法插入节点
int sum=0;
while(null!=l1||null!=l2||sum/10!=0){
//sum/10!=0,判断,确保在两个链表位数相同时,若有进位,会丢失;eg 5+5, output:01;若没该判断,输出0,进位1丢失
sum=sum/10;//留下低位的 进位
if(null!=l1){
sum=sum+l1.val;
l1=l1.next;
}
if(null!=l2){
sum=sum+l2.val;
l2=l2.next;
}
lastNode.next=new ListNode(sum%10);//留下低位的 和
lastNode=lastNode.next;
}
return ret.next;
/*
* 以下方法,需要遍历3次 数字长度,最后在得到真正sum之后,可以一次得到由低到高 位 上的数字,用尾插法得到逆序链表,
for(int i=0;null!=tmp;){
num1+=tmp.val*Math.pow(10, i);
tmp=tmp.next;i++;
}
tmp=l2;
for(int i=0;null!=tmp;){
num2+=tmp.val*Math.pow(10, i);
tmp=tmp.next;i++;
}
int sum=num1+num2;
while(sum!=0){
ListNode temp=new ListNode(sum%10);
ret.next=temp;
sum=sum/10;
}*/
}
注意:**//留下低位的 进位
//留下低位的 和**