I've recently been looking up linked lists in Lua and have a quick question that so far I haven't been able to find an answer for
local head = nil
head = {next = head, value = "d"}
head = {next = head, value = "c"}
head = {next = head, value = "b"}
head = {next = head, value = "a"}
local entry = head
while entry do
print(entry.value)
entry = entry.next
end
This will end up printing out "a,b,c,d". I understand why it would print out backwards, as the first 'node' available would be the final one created (with value = a). My question is why the 'head's created before the final one still exist and have not simply been overwritten in the memory.
What do you mean by "overwritten in the memory"? Nothing you're doing would cause that to happen.
Let's look at what you're doing step by step.
local head = nil
There now exists a local variable called head
. It has the value nil
.
head = {next = head, value = "d"}
Let's break this down into the sequence of operations here. This is equivalent to the following:
do
local temp = {}
temp.next = head --This is still `nil`
temp.value = "d"
head = temp
end
Every table you construct is a unique value. So let's call this first table table-d
. It is constructed, stored in the temporary variable temp
. The table is given a next
value of nil
. And it gets a value
value of "d"
. And the result is stored in the local variable head
.
So now head
has the value table-d
. Next step:
head = {next = head, value = "c"}
Same thing:
do
local temp = {}
temp.next = head --Not nil anymore.
temp.value = "c"
head = temp
end
OK, we create a new table. For the sake of clarity, we'll call this table table-c
.
We store this in temp
. We then set it's next
field to the value in head
. That value is table-d
. We set the value
field to "c"
. And then store table-c
into head
.
The table-c
table looks like this:
{
next = { value = "d" }
value = "c"
}
That is the table stored in head
.
This continues like this. So where would something be "overwritten"?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With