Linked Structures
Insert at Head
Insert a new first node by pointing it at the old head and then moving the head pointer.
Algorithm
The replay labels nodes by value, such as node(20), and never exposes object
identity or memory addresses. This Fortran DSA implementation uses the
same small chain as the rest of the DSA track.
Basic Implementation
basic.f90
program linked_list_lesson
implicit none
type :: list_node
integer :: value
type(list_node), pointer :: next => null()
end type list_node
type(list_node), pointer :: head, cursor, new_head
type(list_node), pointer :: n1, n2, n3, n4
allocate(n2); n2%value = 20
allocate(n3); n3%value = 30
n2%next => n3; n3%next => null()
head => n2
allocate(new_head); new_head%value = 10
new_head%next => head
head => new_head
call print_chain(head)
contains
subroutine print_chain(start)
type(list_node), pointer :: start
type(list_node), pointer :: cur
cur => start
do while (associated(cur))
write(*, '(I0,A)', advance='no') cur%value, ' -> '
cur => cur%next
end do
write(*, '(A)') 'null'
end subroutine print_chain
end program linked_list_lesson
Complexity
- Time: O(1)
- Space: O(1)
Implementation notes
- Keep the explicit node and pointer/reference operations; array shortcuts hide the linked-list state this lesson is meant to replay.
- The final output prints the chain in a deterministic
a -> b -> nullform for cross-language comparison.
old head
The previous first node becomes the second node.
constant-time insert
Only the new node and head pointer change.