62 lines
1.1 KiB
Plaintext
62 lines
1.1 KiB
Plaintext
// Rosetta Code problem: http://rosettacode.org/wiki/Singly-linked_list/Element_insertion
|
|
// by Galileo, 02/2022
|
|
|
|
FIL = 1 : DATO = 2 : LINK = 3
|
|
countNodes = 0 : Nodes = 10
|
|
|
|
dim list(Nodes, 3)
|
|
|
|
|
|
sub searchNode(node)
|
|
local i, prevNode
|
|
|
|
for i = 1 to countNodes
|
|
if i = node break
|
|
prevNode = list(prevNode, LINK)
|
|
next
|
|
|
|
return prevNode
|
|
end sub
|
|
|
|
sub insertNode(node, newNode, after)
|
|
local prevNode, i
|
|
|
|
prevNode = searchNode(node)
|
|
|
|
if after prevNode = list(prevNode, LINK)
|
|
|
|
for i = 1 to Nodes
|
|
if not list(i, FIL) break
|
|
next
|
|
|
|
list(i, FIL) = true
|
|
list(i, DATO) = newNode
|
|
list(i, LINK) = list(prevNode, LINK)
|
|
list(prevNode, LINK) = i
|
|
|
|
countNodes = countNodes + 1
|
|
if countNodes = Nodes then Nodes = Nodes + 10 : redim list(Nodes, 3) : end if
|
|
end sub
|
|
|
|
|
|
sub printNode(node)
|
|
local prevNode
|
|
|
|
prevNode = searchNode(node)
|
|
node = list(prevNode, LINK)
|
|
|
|
// print list(node, FIL);
|
|
print list(node, DATO);
|
|
// print list(node, LINK);
|
|
print
|
|
end sub
|
|
|
|
|
|
insertNode(1, 1000, true)
|
|
insertNode(1, 2000, true)
|
|
insertNode(1, 3000, true)
|
|
|
|
printNode(1)
|
|
printNode(2)
|
|
printNode(3)
|