#ifndef _LL_H
#define _LL_H

typedef struct base_node {
   struct base_node *next ; 
   // no data!!
} base_node ;


typedef void (* print_ftype) (void *) ;

// Returns pointer to new linked list's dummy header.
base_node *LL_New() ;

// Inserts new node with data at beginning of linked list.
void LL_Insert(base_node *header, void *n) ;

// returns pointer to first item in the list.
void *LL_First(base_node *header) ;

// remove and return first node in linked list
void *LL_Extract(base_node *header) ;

// Delete first node of linked list 
void LL_Delete(base_node *header) ;

// Make list into empty list
void LL_Empty(base_node *header) ;

// Destroy entire data structure.
void LL_Destroy(base_node *header) ;

// Print all nodes in linked list
//
void LL_Print(base_node *header, print_ftype f) ;

#endif