Python创建两链表并相加;leetcode两数求和

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


class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        """创建一个空链表,p、q指向头节点,q用来最后返回,p用来遍历"""
        p = q = ListNode(0)
        val = 0

        while val or l1 or l2:
            val, cur = divmod(val + (l1.val if l1 else 0) + (l2.val if l2 else 0), 10)
            """等效于
            sum 存储两节点数值 以及 进位标志位 三者相加的结果
            sum = val + (l1.val if l1 else 0) + (l2.val if l2 else 0)
            cur = sum % 10    #取余
            val = sum // 10   #取整"""
            #创建新链表
            p.next = ListNode(cur)
            p = p.next
            l1 = l1.next if l1 else None
            l2 = l2.next if l2 else None
        return q.next


"""创建链表"""
def generateList(l: list) -> ListNode:
    p = q = ListNode(0)
    for val in l:
        p.next = ListNode(val)
        p = p.next
    return q.next


"""输出链表"""
def printList(l: ListNode):
    while l:
        print("%d, " % (l.val), end='') #end = ''表示结尾加空格不换行
        l = l.next
    print('')


if __name__ == "__main__":
    l1 = generateList([2, 4, 3])
    l2 = generateList([5, 6, 4])
    printList(l1)
    printList(l2)
    s = Solution()
    printList(s.addTwoNumbers(l1, l2))

猜你喜欢

转载自blog.csdn.net/qq_39429779/article/details/108952403