Lua中的Linked List示例实际上如何工作?

时间:2013-03-29 17:48:52

标签: lua linked-list

几年后我正在重新学习编程,目前我正专注于C#和Lua。我为Lua使用的这本书有一个链接列表的例子,但是我很难理解它是如何工作的。

list = nil
for line in io.lines() do
   list = {next = list, value = line}
end

如果我正在读这个

  • 它正在创建一个新表
  • 将列表分配给该表,设置“下一个”键/标识符(正确的术语?)以指向列表(在第一个创建的表的位置仍为零)
  • 然后将“value”键/标识符设置为
  • 中读取的内容
  • 然后“list”现在实际指向新创建的表

然后在循环的下一次运行

  • 创建下一个表格
  • 将“next”键/标识符设置为指向列表(现在指向以前创建的表)
  • 然后将“value”键/标识符设置为
  • 中读取的内容
  • 然后“list”现在实际上指向新创建的表...再次

我只是想确定我确切地理解了这是如何工作的,因为列表正在尝试创建一个表并指向当前指向的任何内容,直到执行完成的行之前有点奇怪/奇怪并且列表已更新为指向最新创建的表。

还是我离开这里?

2 个答案:

答案 0 :(得分:4)

这有点类似于LIFO链接列表在其他语言中的含义(如)。是的,你正确地关注它。

假设我的输入是:(按相同的顺序)

  • 21
  • 您好
  • 35
  • 没有

然后,我的list创建为:

list = {
    value = "No",
    next = {
        value = 35,
        next = {
            value = "Hi",
            next = {
                value = 21
                next = nil
            }
        }
    }
}

答案 1 :(得分:0)

基本上,正在发生的是,在for循环中,您正在创建一个表,而next键最初是nil。在随后的循环中,您将再次创建表,并使用list变量将其分配给next键,该键现在是对上一个表的引用,依此类推。

我给你举个例子。

for i=1,3 do
    list = {int=i, next=list}
end

执行此操作时,第一个next键将为nil,因为尚未定义list。但是在下一个表中,其next键将是对上一个表的引用,依此类推。如果尝试打印list.intlist.next,则它们将引用int = 3的表,因为for循环以3结尾,因此变量引用了该部分。如果需要更改此设置,只需将数字for循环更改为

for i=3,1,-1 do

所以它实际上看起来像这样:

list = {int=1, next=nil}
list = {int=2, next=previousTable}
list = {int=3, next=previousTable}

list = {
    int=3, 
    next = {
        int=2, 
        next = {
            int=1, 
            next=nil
        }
    }
}

希望这会有所帮助。