题目为把两个非负整数逆序存储在链表中,求和并返回一个链表。例如:234+126=360,在这个题目中即为
输入:4-->3-->2 6-->2-->1 输出:0-->6-->3
public class AddTwoNumbers {
public static void main(String[] args) {
ListNode l1=new ListNode(4);
ListNode l2=new ListNode(3);
ListNode l3=new ListNode(2);
l1.next=l2;
l2.next=l3;
ListNode l4=new ListNode(6);
ListNode l5=new ListNode(2);
ListNode l6=new ListNode(1);
l4.next=l5;
l5.next=l6;
AddTwoNumbers atn=new AddTwoNumbers();
ListNode result=atn.addTwoNumbers(l1, l4);
while(result!=null){
System.out.print(result.val);
result=result.next;
}
}
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int s=0; //保存每两个对应节点相加后的进位
int sum=0; //保存每两个对应节点相加后的和
ListNode temp; //每求出一个和,生成一个节点
ListNode result=null; //保存最后求和结果的链表
ListNode pointer=null; //结果链表中的指针,总是指向链表的最后一个节点
while(l1!=null || l2!=null || s!=0){ //l1不为空或l2不为空或者有进位时,求和都会继续
if(l1==null && l2==null){
sum=s;
}else if(l1==null){
sum=l2.val+s;
l2=l2.next;
}else if(l2==null){
sum=l1.val+s;
l1=l1.next;
}else{
sum=l1.val+l2.val+s;
l1=l1.next;
l2=l2.next;
}
if(sum>9){ //sum大于9,进位为1
s=1;
sum=sum%10;
}else{
s=0;
}
temp=new ListNode(sum);
if(result==null){ //result为空,表示相加的是第一个节点
result=temp;
pointer=result;
}else{ //result不为空,利用我们的指针,将求得的节点接在pointer后面,再将poiter指向最后加入的节点
pointer.next=temp;
pointer=pointer.next;
}
}
return result;
}
}
//链表中的每个节点
class ListNode{
int val;
ListNode next;
public ListNode(int x){
val=x;
next=null;
}
}