their placeswithout worrying about the exact way those places are represented (see figure figure node list the positions in the current order are pqrand there may at first seem to be redundancy in the above repertory of operations for the node list adtsince we can perform operation addfirst(ewith addbefore(first() )and operation addlast(ewith addafter(getlast()ebut these substitutions can only be done for nonempty list note that an error condition occurs if position passed as argument to one of the list operations is invalid reasons for position to be invalid includep null was previously deleted from the list is position of different list is the first position of the list and we call prev(pp is the last position of the list and we call next(pwe illustrate the operations of the node list adt in the following example example we show below series of operations for an initially empty list node we use variables and so onto denote different positionsand we show the object currently stored at such position in parentheses operation output addfirst(