美文网首页
Python LeetCode-2.两数相加(难度-中等)(py

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

作者: Jayce_xi | 来源:发表于2019-03-08 11:24 被阅读0次

    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.两数相加(难度-中等)(py

          本文链接:https://www.haomeiwen.com/subject/eralpqtx.html