• 2. Add Two Numbers——Python


    题目:

    You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
    Output: 7 -> 0 -> 8

    代码:

    该题目其实就是链表中的数字取出来,然后相加,不过注意高位数字在后面,需要倒过来。比如题目例子中就是要:342+465=807,之后把807每一位从小到大记录在一个链表里。

    于是,我用了最常规的办法,不过也是解决了问题的:

    #coding:utf-8
    # Definition for singly-linked list.
    class ListNode(object):
        def __init__(self, x):
            self.val = x
            self.next = None
    
    class Solution(object):
        def addTwoNumbers(self, l1, l2):
            """
            :type l1: ListNode
            :type l2: ListNode
            :rtype: ListNode
            """
            if not l1 and not l2:return
            #取出链表中的数字存入数组
            arr1,arr2=[],[]       
            while l1:
                arr1.append(l1.val)    
                l1 = l1.next
            while l2:
                arr2.append(l2.val)    
                l2 = l2.next 
            #倒序
            arr1.reverse()
            arr2.reverse()
            #print (arr1,arr2)
            #组成数字
            num1,num2 = 0,0
            for i in arr1:
                num1 = num1*10+i
            for i in arr2:
                num2 = num2*10+i        
            print (num1,num2)
            #相加
            num_total = num1+num2
            print (num_total)
            #从低位到高位写入链表,初始化链表的根节点为0,如果相加的和为0,直接返回
            l_res = ListNode(0)
            cursor = l_res
            if num_total == 0: return l_res
            while num_total:
                temp = num_total%10
                print (temp)
                cursor.next = ListNode(temp)
                cursor = cursor.next
                num_total = int(num_total/10)
                #print (num_total)
            return l_res.next
                
            
    if __name__=='__main__':
        #创建l1和l2两个链表,注意,排序好的就需要arr1和arr2中数字从小到大
        arr1 = [0,8,6,5,6,8,3,5,7]
        arr2 = [6,7,8,0,8,5,8,9,7]
        l1 = ListNode(arr1[0])
        p1 = l1
        l2 = ListNode(arr2[0])
        p2 = l2
        for i in arr1[1:]:
            p1.next = ListNode(i)
            p1 = p1.next
        for i in arr2[1:]:
            p2.next = ListNode(i)
            p2 = p2.next    
        s=Solution()
        #两个链表相加
        q=s.addTwoNumbers(l1,l2)  

    一些打印的输出:

    753865680 798580876
    1552446556
    6
    5
    5
    6
    4
    4
    2
    5
    5
    1
  • 相关阅读:
    数学考试
    奇♂妙拆分
    11.25
    11.21
    11.20
    11.19
    11.18
    11.15
    11.14作业
    11.14
  • 原文地址:https://www.cnblogs.com/yuanzhaoyi/p/6136809.html
Copyright © 2020-2023  润新知