Linked Structures
Insert at Head
Insert a new first node by pointing it at the old head and then moving the head pointer.
Algorithm
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.