方法一
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def addTwoNumbers(self, l1, l2):
sumMul=1
sum1=0
sum2=0
#计算l1的数值
while l1:
sum1+=l1.val*sumMul
sumMul*=10
l1=l1.next
sumMul=1
#计算l2的数值
while l2:
sum2+=l2.val*sumMul
sumMul*=10
l2=l2.next
#相加
sumLast=sum1+sum2
tn=ListNode(0)
#记住头节点
res=tn
#如果总和是0直接返回
if sumLast==0:
return res
while sumLast>0:
tn.next=ListNode(0)
tn=tn.next
toVal=sumLast%10
sumLast/=10
tn.val=toVal
return res.next
方法二
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int ll=0;//l1和l2对应val的和的个位数
int CarryOver=0;//进位(l1和l2对应val的和的十位数)
ListNode tn=new ListNode(0);
ListNode res=tn;
while(l1!=null&&l2!=null){
tn.next=new ListNode(0);
tn=tn.next;
ll=(l1.val+l2.val+CarryOver)%10;
tn.val=ll;
CarryOver=(l1.val+l2.val+CarryOver)/10;
l1=l1.next;
l2=l2.next;
}
while(l1!=null&&l2==null){
tn.next=new ListNode(0);
tn=tn.next;
ll=(l1.val+CarryOver)%10;
tn.val=ll;
CarryOver=(l1.val+CarryOver)/10;
l1=l1.next;
}
while(l1==null&&l2!=null){
tn.next=new ListNode(0);
tn=tn.next;
ll=(l2.val+CarryOver)%10;
tn.val=ll;
CarryOver=(l2.val+CarryOver)/10;
l2=l2.next;
}
if(CarryOver==1){
tn.next=new ListNode(0);
tn=tn.next;
tn.val=1;
}
return res.next;
}
}
class Solution(object):
def addTwoNumbers(self, l1, l2):
ll=0#l1和l2对应val的和的个位数
CarryOver=0#进位(l1和l2对应val的和的十位数)
tn=ListNode(0)
res=tn
while l1 and l2:
tn.next=ListNode(0)
tn=tn.next
ll=(l1.val+l2.val+CarryOver)%10
tn.val=ll
CarryOver=(l1.val+l2.val+CarryOver)/10
l1=l1.next
l2=l2.next
while l1 and l2 is None:
tn.next=ListNode(0)
tn=tn.next
ll=(l1.val+CarryOver)%10
tn.val=ll
CarryOver=(l1.val+CarryOver)/10
l1=l1.next
while l1 is None and l2:
tn.next=ListNode(0)
tn=tn.next
ll=(l2.val+CarryOver)%10
tn.val=ll
CarryOver=(l2.val+CarryOver)/10
l2=l2.next
if CarryOver==1:
tn.next=ListNode(0)
tn=tn.next
tn.val=1
return res.next