【LeetCode】2. Add Two Numbers解题报告(Python)

题目:。将您获得两个链表,链表内容为非负整数以数字相反的顺序存储,每个节点包含一个数字两个链表整数相加后作为链表返回。

例:

输入:(2  - > 4  - > 3)+(5  - > 6  - > 4)
输出: 7  - > 0  - > 8
说明: 342 + 465 = 807。

请特别注意以下情况:

测试用例 说明
L1 = [0,1]
l2 = [0,1,2]
当一个列表比另一个列表长时。
L1 = []
l2 = [0,1]
当一个列表为空时,表示空列表。
L1 = [9,9]
l2 = [1]
总和最后可以额外携带一个,这很容易忘记。

 

代码说明:

1,判断L1为空返回L2,L2为空返回L1

2,初始化变量

carry = 0 # 进位标志符
ret = ListNode(0) # 初始化返回的字符串
ret_Last = ret # 指向返回字符串末尾指针

3,只要l1或者l2不为空,循环相加,每次相加后要加仅为标志符,超出10对10取余,令标志为真(python中做加法运算时,True为1,False为0)

4,添加到返回链表的最后并后移指针

ret_Last.next = ListNode(sum % 10) # 添加到返回链表的最后
ret_Last = ret_Last.next # 后移指针

5,跳出循环并返回结果

ret = ret.next # 因为开始把返回链表首位初始化为0,所以要把首部指针后以一位
if carry:
    ret_Last.next = ListNode(1) # 如果最后进位标志为True则在返回链表最后添加1
del ret_Last # 删除末尾指针
return ret # 返回结果链表

完整代码(用于自己测试,提交代码在下方):

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None


class Solution:
    # @return a ListNode
    def addTwoNumbers(self, l1, l2):
        if l1 is None:
            return l2
        elif l2 is None:
            return l1
        else:
            carry = 0
            ret = ListNode(0)
            ret_Last = ret
            while(l1 or l2):
                sum = 0
                if l1:
                    sum += l1.val
                    l1 = l1.next
                if l2:
                    sum += l2.val
                    l2 = l2.next
                sum += carry
                ret_Last.next = ListNode(sum % 10)
                ret_Last = ret_Last.next
                carry = (sum >= 10)
            ret = ret.next
            if carry:
                ret_Last.next = ListNode(1)
            del ret_Last
            return ret

def myPrintList(l):
    while(True):
        print(l.val)
        if l.next is not None:
            l = l.next
        else:
            print()
            break

if __name__ == '__main__':
    # 342 + 465 = 807
    l1_1 = ListNode(3)
    l1_2 = ListNode(4)
    l1_3 = ListNode(2)
    l1_1.next = l1_2
    l1_2.next = l1_3

    l2_1 = ListNode(4)
    l2_2 = ListNode(6)
    l2_3 = ListNode(5)
    l2_1.next = l2_2
    l2_2.next = l2_3

    l3 = Solution().addTwoNumbers(l1_1, l2_1)
    myPrintList(l3)

提交代码(仅提交解决方案类即可):

class Solution:
    # @return a ListNode
    def addTwoNumbers(self, l1, l2):
        if l1 is None:
            return l2
        elif l2 is None:
            return l1
        else:
            carry = 0
            ret = ListNode(0)
            ret_Last = ret
            while(l1 or l2):
                sum = 0
                if l1:
                    sum += l1.val
                    l1 = l1.next
                if l2:
                    sum += l2.val
                    l2 = l2.next
                sum += carry
                ret_Last.next = ListNode(sum % 10)
                ret_Last = ret_Last.next
                carry = (sum >= 10)
            ret = ret.next
            if carry:
                ret_Last.next = ListNode(1)
            del ret_Last
            return ret

 

你可能感兴趣的:(python,LeetCode,LeetCode题目记录)