Question
For JAVA. DoublyLinkedList.java: (Create this class and copy code into it) public class DoublyLinkedList { //---------------- nested Node class ---------------- /** * Node of a
For JAVA.
DoublyLinkedList.java: (Create this class and copy code into it)
public class DoublyLinkedList
//---------------- nested Node class ---------------- /** * Node of a doubly linked list, which stores a reference to its * element and to both the previous and next node in the list. */ private static class Node
/** The element stored at this node */ private E element; // reference to the element stored at this node
/** A reference to the preceding node in the list */ private Node
/** A reference to the subsequent node in the list */ private Node
/** * Creates a node with the given element and next node. * * @param e the element to be stored * @param p reference to a node that should precede the new node * @param n reference to a node that should follow the new node */ public Node(E e, Node
// public accessor methods /** * Returns the element stored at the node. * @return the element stored at the node */ public E getElement() { return element; }
/** * Returns the node that precedes this one (or null if no such node). * @return the preceding node */ public Node
/** * Returns the node that follows this one (or null if no such node). * @return the following node */ public Node
// Update methods /** * Sets the node's previous reference to point to Node n. * @param p the node that should precede this one */ public void setPrev(Node
/** * Sets the node's next reference to point to Node n. * @param n the node that should follow this one */ public void setNext(Node
// instance variables of the DoublyLinkedList /** Sentinel node at the beginning of the list */ private Node
/** Sentinel node at the end of the list */ private Node
/** Number of elements in the list (not including sentinels) */ private int size = 0; // number of elements in the list
/** Constructs a new empty list. */ public DoublyLinkedList() { header = new Node(null, null, null); // create header trailer = new Node(null, header, null); // trailer is preceded by header header.setNext(trailer); // header is followed by trailer }
// public accessor methods /** * Returns the number of elements in the linked list. * @return number of elements in the linked list */ public int size() { return size; }
/** * Tests whether the linked list is empty. * @return true if the linked list is empty, false otherwise */ public boolean isEmpty() { return size == 0; }
/** * Returns (but does not remove) the first element of the list. * @return element at the front of the list (or null if empty) */ public E first() { if (isEmpty()) return null; return header.getNext().getElement(); // first element is beyond header }
/** * Returns (but does not remove) the last element of the list. * @return element at the end of the list (or null if empty) */ public E last() { if (isEmpty()) return null; return trailer.getPrev().getElement(); // last element is before trailer }
// public update methods /** * Adds an element to the front of the list. * @param e the new element to add */ public void addFirst(E e) { addBetween(e, header, header.getNext()); // place just after the header }
/** * Adds an element to the end of the list. * @param e the new element to add */ public void addLast(E e) { addBetween(e, trailer.getPrev(), trailer); // place just before the trailer }
/** * Removes and returns the first element of the list. * @return the removed element (or null if empty) */ public E removeFirst() { if (isEmpty()) return null; // nothing to remove return remove(header.getNext()); // first element is beyond header }
/** * Removes and returns the last element of the list. * @return the removed element (or null if empty) */ public E removeLast() { if (isEmpty()) return null; // nothing to remove return remove(trailer.getPrev()); // last element is before trailer }
// private update methods /** * Adds an element to the linked list in between the given nodes. * The given predecessor and successor should be neighboring each * other prior to the call. * * @param predecessor node just before the location where the new element is inserted * @param successor node just after the location where the new element is inserted */ private void addBetween(E e, Node
/** * Removes the given node from the list and returns its element. * @param node the node to be removed (must not be a sentinel) */ private E remove(Node
/** * Produces a string representation of the contents of the list. * This exists for debugging purposes only. */ public String toString() { StringBuilder sb = new StringBuilder("("); Node
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started