【LeetCode】两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : leet1.py
# @Author: Lcy
# @Date  : 2018/11/22
# @Desc  :  给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。


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


class Solution:
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        res = ListNode(0)  # 结果链表
        cur = res
        sum = 0     # 计算节点的值
        flag = 0    # 是否进位
        while l1 or l2:
            if l1:
                sum += l1.value
                l1 = l1.next
            if l2:
                sum += l2.value
                l2 = l2.next
            # 如果flag=1 进位1
            if flag == 1:
                sum += 1
            # 如果大于等于10 就取余进位
            if sum >= 10:
                flag = 1
                sum = sum % 10
            cur.next = ListNode(sum)
            cur = cur.next
            # 将计算节点值 置 0
            sum = 0
        # 加到最后一位如果还需要进位就补一个 1    例如  2->4->7   5->6->3   最后应该是 7->0->1->1
        if flag == 1:
            cur.next = ListNode(1)
        return res.next


if __name__ == '__main__':
    l1 = ListNode(2)
    l1.next = ListNode(4)
    l1.next.next = ListNode(3)

    l2 = ListNode(5)
    l2.next = ListNode(6)
    l2.next.next = ListNode(4)

    s = Solution()
    result = s.addTwoNumbers(l1, l2)
    while result != None:
        print(result.value)
        result = result.next
原文地址:https://www.cnblogs.com/dreamyu/p/10002441.html