两数相加(Leetcode)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

#没啥想法。。就模拟加法。。

class Solution:
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        
        len1 = 0
        len2 = 0
        head1 = l1#留下头结点
        head2 = l2
        lis = ListNode(0)
        while(head1!=None):#求一下长度,虽然也可以用while (l1!=None):来解决,但我还是求了
            head1 = head1.next
            len1 += 1
        while(head2!=None):
            head2 = head2.next
            len2 += 1
        head1 = l1
        head2 = l2
        headlis = lis
        if(len1>=len2):#没啥好说的。。下面都都是简单的代码。。
            for i in range(len2):
                headlis.val = head1.val + head2.val + headlis.val
                head1 = head1.next
                head2 = head2.next
                if(len1!=len2):
                    if(headlis.val>=10):
                        headlis.val = headlis.val - 10
                        headlis.next = ListNode(1)
                        headlis = headlis.next
                    else:
                        headlis.next = ListNode(0)
                        headlis = headlis.next
                if(len1==len2):
                    if(headlis.val>=10):
                        headlis.val = headlis.val - 10
                        headlis.next = ListNode(1)
                        headlis = headlis.next
                    else:
                        if(i<len2-1):
                            headlis.next = ListNode(0)
                            headlis = headlis.next
            for i in range(len2,len1):
                headlis.val = head1.val + headlis.val
                head1 = head1.next
                if(headlis.val>=10):
                    headlis.val = headlis.val - 10
                    headlis.next = ListNode(1)
                    headlis = headlis.next
                elif(i<len1-1):
                    headlis.next = ListNode(0)
                    headlis = headlis.next
        if(len1<len2):
            for i in range(len1):
                headlis.val = head1.val + head2.val + headlis.val
                head1 = head1.next
                head2 = head2.next
                if(headlis.val>=10):
                    headlis.val = headlis.val - 10
                    headlis.next = ListNode(1)
                    headlis = headlis.next
                else:
                    headlis.next = ListNode(0)
                    headlis = headlis.next
            for i in range(len1,len2):
                headlis.val = head2.val + headlis.val
                head2 = head2.next
                if(headlis.val>=10):
                    headlis.val = headlis.val - 10
                    headlis.next = ListNode(1)
                    headlis = headlis.next
                elif(i<len2-1):
                    headlis.next = ListNode(0)
                    headlis = headlis.next
        
        return lis

'''

这里比较难受的就是,我以为它传给我的是一个带有表头的链表(即第一个节点值为空,指针往下指),然鹅并不是。

后来我发现,在LeetCode里面可以用print输出。。我太tm开心了。。

最后膜拜了一下大佬的代码

rem = 0

dummy = ListNode(0)

p = dummy

扫描二维码关注公众号,回复: 4719452 查看本文章

while l1 or l2 or rem:

    s = (l1.val if l1 else 0) + (l2.val if l2 else 0) + rem

    rem = s/10 

    p.next = ListNode(s%10)

    p = p.next

    if l1:

        l1 = l1.next

    if l2:

        l2 = l2.next

return dummy.next

'''

猜你喜欢

转载自blog.csdn.net/weixin_41169182/article/details/84889175