Singly-linked list/Element removal: Difference between revisions

Singly-linked list/Element removal in FreeBASIC
(Singly-linked list/Element removal in FreeBASIC)
Line 514:
</lang>
No label, no nasty literal GO TO - even though an "END DO" hides one.
 
=={{header|FreeBASIC}}==
{{trans|Yabasic}}
<lang freebasic>#define FIL 1
#define DATO 2
#define LINK 3
 
Dim Shared As Integer countNodes, Nodes
countNodes = 0 : Nodes = 10
Dim Shared As Integer list(Nodes, 3)
 
Function searchNode(node As Integer) As Integer
Dim As Integer i, prevNode
For i = 1 To countNodes
If i = node Then Exit For 'break
prevNode = list(prevNode, LINK)
Next i
Return prevNode
End Function
 
Sub insertNode(node As Integer, newNode As Integer, after As Integer)
Dim As Integer i, prevNode
prevNode = searchNode(node)
If after Then prevNode = list(prevNode, LINK)
For i = 1 To Nodes
If Not list(i, FIL) Then Exit For
Next i
list(i, FIL) = true
list(i, DATO) = newNode
list(i, LINK) = list(prevNode, LINK)
list(prevNode, LINK) = i
countNodes += 1
If countNodes = Nodes Then Nodes += 10 : Redim list(Nodes, 3)
End Sub
 
Sub removeNode(n As Integer)
Dim As Integer prevNode = searchNode(n)
Dim As Integer node = list(prevNode, LINK)
list(prevNode, LINK) = list(node, LINK)
list(node, FIL) = false
countNodes -= 1
End Sub
 
Sub printNode(node As Integer)
Dim As Integer prevNode = searchNode(node)
node = list(prevNode, LINK)
Print list(node, DATO);
Print
End Sub
 
insertNode(1, 1000, true)
insertNode(1, 2000, true)
insertNode(1, 3000, true)
 
printNode(1)
printNode(2)
printNode(3)
 
removeNode(2)
 
Print
printNode(1)
printNode(2)</lang>
{{out}}
<pre>1000
3000
2000
 
1000
2000</pre>
 
=={{header|Go}}==
2,122

edits