第一种情况:(两个链表长度相同) 第二种情况:(两个链表长度不同)
解题思路:
创建一个头节点head:便于输出相加后的链表
创建一个傀儡节点dummy: 是链表中的节点从head遍历,而使head不变
创建一个addOne进位:初始值addOne=0;来判断两数相加有无进位
public class AddTwoNumbers {
public static ListNode addTwoNumbers(ListNode l1,ListNode l2){
if(l1==null&&l2==null){
return null;
}
ListNode head=new ListNode(0);
ListNode dummy=head;
int addOne=0;
while(l1!=null||l2!=null||addOne!=0 ){
int val1=l1==null?0:l1.val;//l1=null则val1=0,否则val1=l1.val
int val2=l2==null?0:l2.val;//l2=null则val2=0,否则val2=l2.val
int sum=val1+val2+addOne;
yummy.next=new ListNode(sum%10);//下一个节点的值
yummy=yummy.next;//遍历相加后的链表
addOne=sum/10;
if(l1!=null){
l1=l1.next;//遍历l1
}
if(l2!=null){
l2=l2.next;//遍历l2
}
}
return head.next ;
}
public static class ListNode{
int val;
ListNode next;
public ListNode(int val){
this.val=val;
}
}