Question: SUBMIT LINKEDLIST.JAVA WITH FOLLOWING TWO METHODS ADDED. MUST BE GOOD FORWARDS AND BACKWARD LINKS. CODE PASTED BELOW isPerfectMirror(); returns true if this list is a
SUBMIT LINKEDLIST.JAVA WITH FOLLOWING TWO METHODS ADDED. MUST BE GOOD FORWARDS AND BACKWARD LINKS. CODE PASTED BELOW
isPerfectMirror(); returns true if this list is a mirror. Use the Chapter 15 exercise #18 definition of mirror(). For example, if this LinkedList contains the values ["a", "b", "c", "c", "b", "a"] then isPerfectMirror() returns true, while ["a", "b", "c"] would return false.
B. undoMirror(); a void method that will undo the mirror if this list is mirrored, as in isPerfectMirror() returns true. Whenever isPerfectMirror() is false, the undoMirror() method leaves this list unchanged..
import java.util.*; // Class LinkedList
public class LinkedList
// NOTE: an empty list has TWO Nodes to mark front and back // post: constructs an empty list public LinkedList() { front = new ListNode
// post: returns the current number of elements in the list public int size() { return size; }
// pre : 0 <= index < size() (throws IndexOutOfBoundsException if not) // post: returns the value at the given index in the list public E get(int index) { checkIndex(index); ListNode
// post: creates a comma-separated, bracketed version of the list public String toString() { if (size == 0) { return "[]"; } else { String result = "[" + front.next.data; ListNode
// post: creates a comma-separated, bracketed version of the list // Iverson creation public String backwards() { if (size == 0) { return "[]"; } else { String result = "[" + back.prev.data; ListNode
// post : returns the position of the first occurrence of the given // value (-1 if not found) public int indexOf(E value) { int index = 0; ListNode
// post: returns true if list is empty, false otherwise public boolean isEmpty() { return size == 0; }
// post: returns true if the given value is contained in the list, // false otherwise public boolean contains(E value) { return indexOf(value) >= 0; }
// post: appends the given value to the end of the list public void add(E value) { add(size, value); }
// pre: 0 <= index <= size() (throws IndexOutOfBoundsException if not) // post: inserts the given value at the given index, shifting subsequent values right public void add(int index, E value) { if (index < 0 || index > size) { throw new IndexOutOfBoundsException("index: " + index); } ListNode
// post: appends all values in the given list to the end of this list public void addAll(List
// pre : 0 <= index < size() (throws IndexOutOfBoundsException if not) // post: removes value at the given index, shifting subsequent values left public void remove(int index) { checkIndex(index); ListNode
// pre : 0 <= index < size() (throws IndexOutOfBoundsException if not) // post: replaces the value at the given index with the given value public void set(int index, E value) { checkIndex(index); ListNode
// post: list is empty public void clear() { front.next = back; back.prev = front; size = 0; }
// post: returns an iterator for this list public Iterator
// pre : 0 <= index < size() // post: returns the node at a specific index. Uses the fact that the list // is doubly-linked to start from the front or the back, whichever // is closer. private ListNode
// post: throws an IndexOutOfBoundsException if the given index is // not a legal index of the current list private void checkIndex(int index) { if (index < 0 || index >= size()) { throw new IndexOutOfBoundsException("index: " + index); } }
private static class ListNode
// post: constructs a node with given data and null links public ListNode(E data) { this(data, null, null); }
// post: constructs a node with given data and given links public ListNode(E data, ListNode
private class LinkedIterator implements Iterator
// post: constructs an iterator for the given list public LinkedIterator() { current = front.next; removeOK = false; }
// post: returns true if there are more elements left, false otherwise public boolean hasNext() { return current != back; }
// pre : hasNext() // post: returns the next element in the iteration public E next() { if (!hasNext()) { throw new NoSuchElementException(); } E result = current.data; current = current.next; removeOK = true; return result; }
// pre : next() has been called without a call on remove (i.e., at most // one call per call on next) // post: removes the last element returned by the iterator public void remove() { if (!removeOK) { throw new IllegalStateException(); } ListNode
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
