Add Two Numbers:
题意:给定两个链表,表示两个数字,链表头部存的是数字的个位,输出一个链表,表示两数字的和。
解法:
O(m+n):维护目前进位变量temp,初始化=0。当两个链表都不为空时,将两链表当前node的值加和加上进位变量temp % 10成为ans的新节点,该值/ 10存到进位变量temp里。若只有一个节点不为空,操作类似。当两个链表都为空时,主要看进位变量是否为1,若为1,ans最高位需要加一个新节点。
public class Solution148 {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode ansHead=null;
ListNode ansTail=null;
int temp=0;
while(l1!=null||l2!=null){
ListNode tempNode=null;
if (l1!=null&&l2!=null){
tempNode=newListNode((l1.val+l2.val+temp) % 10);
temp=(l1.val+l2.val+temp)/ 10;
l1=l1.next;
l2=l2.next;
}else{
if (l1!=null){
tempNode=newListNode((l1.val+temp) % 10);
temp=(l1.val+temp)/ 10;
l1=l1.next;
}
if (l2!=null){
tempNode=newListNode((l2.val+temp) % 10);
temp=(l2.val+temp)/ 10;
l2=l2.next;
}
}
if (ansHead==null){
ansHead=tempNode;
ansTail=tempNode;
}else{
ansTail.next=tempNode;
ansTail=tempNode;
}
}
if (temp>0){
ansTail.next=new ListNode(1);
ansTail=ansTail.next;
ansTail.next=null;
}
ansTail.next=null;
return ansHead;
}
}