#ifndef LL #define LL #define NEW_NODE llnode(); #include #include // Node typedef struct Node { int value; struct Node* next; } Node; // Create & initialise a new node Node* llnode(int value); // Print linked list values void llprint(Node* head); void llvprint(Node* head); // Return number of nodes in list // O(n) int lllength(Node* head); // Prepend a value to the list // O(1) void llpush(Node** head, int value); // Pop (remove) first node // O(1) int llpop(Node** head); // Append value to the end of the list // O(n) void llappend(Node* head, int value); // Insert a value to the list at index // O(n) void llinsert(Node** head, int value, int index); // Free nodes from memory // O(n) void llfree(Node** head); // Remove last node // O(n) int llrmlast(Node** head); // Remove node at index // O(n) int llrm(Node** head, int index); #endif //LL