zoukankan      html  css  js  c++  java
  • Add Two Numbers

    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

    这题和Add Binary很像,只是一个使用linked list作为载体,一个是使用array作为载体。同样要注意的是进位的处理。有几种特殊情况要注意,一个是其中一个输入为None,另外是两个输入长度不等。注意当carry有值或者其中一个input有值时都需要再进行计算。另外一个需要注意的地方是,linked list需要维护结点之间的连接关系。但是在处理当前结点时除非对carry,input1的下一位,input2的下一位做判断,无法从当前结点确定的建立对下一个结点的连接。一个比较好的办法是在进行当前计算时,循环中有上一个计算结果的结点cur,本次的计算结果保存在 cur.next。也就是引入哑元素dummy,计算两个input的头结点时使用dummy作为上一个计算结果。代码如下:

    class Solution(object):
        def addTwoNumbers(self, l1, l2):
            """
            :type l1: ListNode
            :type l2: ListNode
            :rtype: ListNode
            """
            if (not l1) and (not l2):
                return None
            dummy = ListNode(-1) 
            cur = dummy
            carry = 0 
            while l1 or l2 or carry :
                if l1:
                    carry +=l1.val
                    l1=l1.next
                if l2:
                    carry +=l2.val
                    l2=l2.next
    
                cur.next=ListNode(carry%10)
                cur=cur.next
                carry = carry/10
            return dummy.next
                
  • 相关阅读:
    go基础第六篇:依赖管理
    go基础第五篇:并发
    go基础第四篇:error、panic、recover
    go基础第三篇:结构体、函数、方法、接口
    docker第二篇:docker compose
    docker第一篇:docker概念及基础命令
    编辑距离
    常见安全漏洞
    go基础第二篇:类型
    go基础第一篇:基本语法
  • 原文地址:https://www.cnblogs.com/sherylwang/p/5425509.html
Copyright © 2011-2022 走看看