这题一定要审题清楚,这题有点想简单计算器的意思,有进位。具体求解的思想是,将两个链表的和以及进位相加后放入到一个新的链表中。特别要注意,最后一个节点是否有进位,如果有进位,需要开一个新的节点存放进位1即可!!!!!处处是陷阱啊
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
if(l1==null){
return l2;
}
if(l2==null){
return l1;
}
ListNode temp1=l1;
ListNode temp2=l2;
ListNode dummy=new ListNode(-1000);
ListNode temp=dummy;//null
int sum=0;
int add=0;
while(temp1!=null && temp2!=null){
if(temp1.val+temp2.val+add>9){
sum=temp1.val+temp2.val+add-10;
add=1;
}else{
sum=temp1.val+temp2.val+add;
add=0;
}
temp.next=new ListNode(sum);
temp=temp.next;
temp1=temp1.next;
temp2=temp2.next;
}
if(temp1==null){
while(temp2!=null){
if(temp2.val+add>9){
sum=temp2.val+add-10;
add=1;
}else{
sum=temp2.val+add;
add=0;
}
temp.next=new ListNode(sum);
temp=temp.next;
temp2=temp2.next;
}
}else if(temp2==null){
while(temp1!=null){
if(temp1.val+add>9){
sum=temp1.val+add-10;
add=1;
}else{
sum=temp1.val+add;
add=0;
}
temp.next=new ListNode(sum);
temp=temp.next;
temp1=temp1.next;
}
}
//如果最后一个相加后出现大于9的状态,需要多一个节点
if(add==0){
return dummy.next;
}else{
temp.next=new ListNode(1);
return dummy.next;
}
}
}