module history implicit none type :: location character(1024)::url type(location), pointer::next end type contains function last_location(first_location) implicit none type(location), pointer::first_location type(location), pointer::last_location if(.not. associated(first_location)) then last_location => null() else last_location => first_location do while(associated(last_location%next)) last_location => last_location%next end do end if end function last_location function add_location(first_location, url) result(head) implicit none type(location), pointer::first_location type(location), pointer::head character(*), intent(in)::url type(location), pointer::last ! Check if it is our first location if(.not. associated(first_location)) then allocate(first_location) first_location%next => null() first_location%url = url else last => last_location(first_location) allocate(last%next) last => last%next last%next => null() last%url = url end if head => first_location end function add_location subroutine back_location(first_location, url) implicit none type(location), pointer::first_location character(*), intent(out)::url type(location), pointer::last, new_last url = " " last => last_location(first_location) if(associated(last)) then if(.not. associated(last, first_location)) then new_last => first_location do while(.not. associated(new_last%next, last)) new_last => new_last%next end do deallocate(last) else new_last => first_location end if new_last%next => null() url = new_last%url end if end subroutine back_location end module history