Python LeetCode-2.两数相加(难度-中等)(python)

1.题目描述:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

2.分析

这个问题首先是一个链表问题,取出每个链表中的每一个节点进行相加,需要用一个变量去承接进位值。考虑的边界条件有两个,一个是两个链表的长度不一致,另一个是最后两个节点相加完有进位值。

3.解决

# 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
        """

        add = 0  # 设定增加的值为0
        head = ListNode(0)  # 先设定一个头节点
        node = head   # 设置当前节点
        while l1 or l2:  # 循环结束条件为l1 且 l2 已经没有下一个节点了
            cur = ListNode(add)    # 生成一个节点
            if l1:
                cur.val += l1.val   # 当l1有节点的情况,增加值
                l1 = l1.next   # l1 取到下一个节点
            if l2:
                cur.val += l2.val
                l2 = l2.next
            add = cur.val // 10   # 取除完10的余数
            cur.val = cur.val % 10  # 取对10取的商值
            node.next, node = cur, cur  # 变换节点
        if add:
            node.next = ListNode(add)
        
        return head.next

你可能感兴趣的:(Python LeetCode-2.两数相加(难度-中等)(python))