交作业之链表加法

老公给布置了一道题,于是我得交一个作业(有点喜欢交作业是怎么回事?怀念在学校的一堆作业的日子了吗?)

题目:

假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。
给定两个这种链表,请生成代表两个整数相加值的结果链表。
例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。

function __Class:test()
    local getNode = function(num,front,next)
        if num >=0 and num <=9 then 
            return {num = num,front = front,next = next}
        end
    end
    local newLink = function(...)
        local args = ...
        local link = {}
        local curNode
        for i,v in ipairs(args) do 
            local newNode = getNode(v,curNode)
            if curNode and curNode.num then 
                curNode.next = newNode
            end
            if not link.head then 
                link.head = curNode
            end
            curNode = newNode
            link.last = curNode
        end
        return link
    end
    local function insertToLink(link,node)
        if not link.last then 
            link.last = node
        end
        if not link.first then 
            -- link.first = node
        else 
            link.first.front = node
            node.next = link.first
        end
        link.first = node 
    end
    local function printLink(link,direct)
        cur = link.last
        while(cur) do 
            dump(cur)
            cur = cur.front
        end
    end

    local function getAdd(link1,link2)
        local link = newLink({})
        local preAdd
        local a = link1.last
        local b = link2.last
        while(a or b or preAdd) do
            local num1 = a and a.num or 0
            local num2 = b and b.num or 0
            local num3 = preAdd or 0
            local add = num1 +num2 +num3
            local yu = add%10
            preAdd = math.floor(add/10)
            preAdd = preAdd>0 and preAdd or nil
            local newNode = getNode(yu)
            insertToLink(link,newNode)
            a = a and a.front or nil
            b = b and b.front or nil
        end
        return link
    end

    local link1 = newLink({9,9,3,4})
    local link2 = newLink({2,3,4})
    local link = getAdd(link1,link2)
    printLink(link)
end
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 两个链表生成相加链表 题目描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。 ...
    东方寂明阅读 381评论 0 2
  • 链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写...
    SunnyZhang的IT世界阅读 1,021评论 0 1
  • 首先简述一下 哈希表结构 HashMap和HashSet之间关系。HashSet存储的是Map中的key,valu...
    ShawnCaffeine阅读 287评论 0 1
  • 通过题目加代码的方式熟悉常用数据结构的操作 例1. 链表相加: 给定两个链表,分别表示两个非负整数。他们的数字逆序...
    Markz__阅读 312评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,613评论 28 53