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

Head insertion changes only two references: the new node points at the old head, then head moves to the new node.

Step 1 - Old first node

Before insertion, head points at node(20).

Original chain before inserting 10 at the head.headnode(20)node(30)null

Step 2 - New node links to old head

Set new.next to the old first node before moving head.

node(10) is allocated and points at the old head node(20).headnode(10)newnode(20)old headnode(30)null

Step 3 - Head moves to the new node

The final chain has 10 first: 10 -> 20 -> 30 -> null.

After insertion, head points at node(10).headnode(10)node(20)node(30)null

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 -> null form 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.