remove and return the last element of this list . pre : size > 0 post : size = old size - 1 concode_field_sep DoubleListNode<E> last concode_elem_sep int size concode_elem_sep DoubleListNode<E> first concode_elem_sep DoubleListNode<E> cur concode_field_sep E next concode_elem_sep void add concode_elem_sep IList<E> getSubList concode_elem_sep E set concode_elem_sep void insert concode_elem_sep boolean hasNext concode_elem_sep void remove concode_elem_sep E remove concode_elem_sep boolean remove concode_elem_sep void addLast concode_elem_sep Iterator<E> iterator concode_elem_sep int size concode_elem_sep void makeEmpty concode_elem_sep E get concode_elem_sep E removeFirst concode_elem_sep boolean equals concode_elem_sep void removeRange concode_elem_sep String toString concode_elem_sep int indexOf concode_elem_sep int indexOf concode_elem_sep void addFirst
E function ( ) { if ( size == 0 ) throw new IllegalArgumentException ( ) ; E loc0 = last . getData ( ) ; if ( size == 1 ) { first = null ; last = null ; } else { last . getPrev ( ) . setNext ( null ) ; last = last . getPrev ( ) ; } size -- ; return loc0 ; }