解题方法
1. Record Type Declaration
For a single node:
TYPE Node
DECLARE Data : INTEGER
DECLARE NextPointer : INTEGER
ENDTYPE
For the full linked list ADT:
TYPE LinkedList
DECLARE Head : INTEGER
DECLARE Tail : INTEGER
DECLARE Current : INTEGER
ENDTYPE
Then instantiate as an array:
DECLARE Node : ARRAY[1:10] OF Node
备注
In Python, use a class with __init__:
class Node:
def __init__(self, data):
self.data = data
self.next = -1
2. Traversal
Pseudocode:
CurrentPointer ← Head
WHILE CurrentPointer <> -1
OUTPUT Node[CurrentPointer].Data
CurrentPointer ← Node[CurrentPointer].NextPointer
ENDWHILE
Key points:
- Always save
Headinto a working variable; never modifyHeadduring a read-only traversal - The loop guard is
CurrentPointer <> -1(orCurrentPointer <> Null) - The advancement
CurrentPointer ← Node[CurrentPointer].NextPointermust be the last line inside the loop
Python equivalent:
def traverse():
current = head
while current != -1:
print(nodes[current].data)
current = nodes[current].next
3. Insertion
Insert at End (most common)
PROCEDURE InsertNode(Value : INTEGER)
DECLARE NewNode : INTEGER
NewNode ← Free
Free ← Node[Free].NextPointer
Node[NewNode].Data ← Value
Node[NewNode].NextPointer ← -1
IF Head = -1 THEN
Head ← NewNode
Tail ← NewNode
ELSE
Node[Tail].NextPointer ← NewNode
Tail ← NewNode
ENDIF
ENDPROCEDURE
Insert at Start
PROCEDURE InsertAtStart(Value : INTEGER)
DECLARE NewNode : INTEGER
NewNode ← Free
Free ← Node[Free].NextPointer
Node[NewNode].Data ← Value
Node[NewNode].NextPointer ← Head
Head ← NewNode
IF Tail = -1 THEN
Tail ← NewNode
ENDIF
ENDPROCEDURE
Insert in Middle (after a given node)
PROCEDURE InsertAfter(Value : INTEGER, AfterNode : INTEGER)
DECLARE NewNode : INTEGER
NewNode ← Free
Free ← Node[Free].NextPointer
Node[NewNode].Data ← Value
Node[NewNode].NextPointer ← Node[AfterNode].NextPointer
Node[AfterNode].NextPointer ← NewNode
ENDPROCEDURE
4. Deletion
PROCEDURE DeleteNode(Value : INTEGER)
DECLARE Current : INTEGER
DECLARE Previous : INTEGER
Current ← Head
Previous ← -1
WHILE Current <> -1 AND Node[Current].Data <> Value
Previous ← Current
Current ← Node[Current].NextPointer
ENDWHILE
IF Current <> -1 THEN
IF Previous = -1 THEN
Head ← Node[Current].NextPointer
ELSE
Node[Previous].NextPointer ← Node[Current].NextPointer
ENDIF
IF Current = Tail THEN
Tail ← Previous
ENDIF
// Return to free list
Node[Current].NextPointer ← Free
Free ← Current
ENDIF
ENDPROCEDURE
5. Search
FUNCTION Search(Value : INTEGER) RETURNS INTEGER
DECLARE Current : INTEGER
Current ← Head
WHILE Current <> -1 AND Node[Current].Data <> Value
Current ← Node[Current].NextPointer
ENDWHILE
RETURN Current
ENDFUNCTION
Tip
Always trace your pointer updates on paper before writing code. Use a small example with 3–4 nodes and label each pointer explicitly.