69.两数相加

方法一

# 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

猜你喜欢

转载自blog.csdn.net/Runner__Binger/article/details/143376516