老公给布置了一道题,于是我得交一个作业(有点喜欢交作业是怎么回事?怀念在学校的一堆作业的日子了吗?)
题目:
假设链表中每一个节点的值都在 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