A linked list is a data structure in which the objects are arranged in a linear order.
Each element of a doubly linked list L is an object with
an attribute key and two other pointer attributes:
next and prev. Given an element x in the list, x.next points to its successor in the linked list, and x.prev points to its predecessor. If x.prev is NIL, the element x has no predecessor and is therefore the first element, or head, of
the list. If x:next = NIL, the element x has no successor and is therefore the last
element, or tail, of the list. An attribute L.head points to the first element of the
list. If L.head = NIL, the list is empty.
The function SEARCH finds the first element with key k in list L by a simple linear search, returning a pointer to this element. If no object with
key k appears in the list, then the procedure returns NIL.
To search a list of n objects, the SEARCH function takes O(n) time in the
worst case, since it may have to search the entire list.
Given an element x whose key attribute has already been set, the INSERT function “splices” x onto the front of the linked list. The running time for INSERT on a list of n elements is O(1).
The function DELETE removes an element x from a linked list L. It must
be given a pointer to x, and it then “splices” x out of the list by updating pointers. If we wish to delete an element with a given key, we must first call SEARCH function to retrieve a pointer to the element. If we wish to delete an element with a given key Θ(n) time is required in the worst case because we must first call SEARCH to find the
element.
The function getFirst returns value of head from linked list L. The running time of getFirst function is O(1).
The function log logs whole linked list L. Starts logging from head while head.Next is not NIL. The running time of log function is Θ(n).