returns new doubly linked list with the element added to the left of the original doubly linked list makelistright(elementlist)which takes an element and doubly linked list and returns new doubly linked list with the element added to the right of the original doubly linked list it is clear that it may possible to construct given doubly linked list in more that one way for examplethe doubly linked list represented above can be constructed by either ofmakelistleft( makelistleft( makelistleft( makelistleft( makelistleft( emptylist))))makelistleft( makelistleft( makelistright( makelistright( makelistleft( emptylist))))in the case of doubly linked listswe have four selectorsfirstleft(list)restleft(list)firstright(list)and restright(listthensince the selectors only work for non-empty listswe also need condition which returns whether list is emptyisempty(listthis leads to automatically-true relationships such asisempty(emptylistnot isempty(makelistleft(xl)(for any and lnot isempty(makelistright(xl)(for any and lfirstleft(makelistleft(xl) restleft(makelistleft(xl) firstright(makelistright(xl) restright(makelistright(xl) circular doubly linked list as simple extension of the standard doubly linked listone can define circular doubly linked list in which the left-most element points to the right-most elementand vice versa this is useful when we might need to move efficiently through whole list of itemsbut might not be starting from one of two particular end points