MyLinkedList java Programming Project
Implement Two Way Linked ListDue: Midnight, November 10, 2021.
The MyLinkedList class is a one-way directional linked list that enables one-way traversal of the list.
MyLinkedList.java is attached in a separate file. Modify the Node class to add the new field named
previous to refer to the previous node in the list, as follows:
public class Node {
E element;
Node next;
Node previous;
public Node(E e) {
element = e;
}
}
Implement a new class named MyTwoWayLinkedList that uses a double linked list to store elements. The
MyLinkedList class in the text extends MyList. Define MyTwoWayLinkedList to extend the
java.util.AbstractSequentialList class. You can find methods of AbstractSequentialList from this article:
https://www.geeksforgeeks.org/abstractsequentiallist-in-java-with-examples/. Study MyLinkedList.java
carefully to understand how it is structured, and where and what you need to modify/implement for
MyTwoWayLinkedList.
Since MyTwoWayLinkedList extends java.util.AbstractSequentialList which implements Iterable, it
includes an iterator () method that returns an object of the iterator interface automatically. Read the
article https://www.softwaretestinghelp.com/java/learn-to-use-java-iterator-with-examples/ for basics to
use iterator. In order to iterate through MyTwoWayLinkedList, we need to implement the methods
listIterator() and listIterator(int index). Both return an instance of java.util.ListIterator. The former sets
the cursor to head of the list and the latter to the element at the specific index.
public ListIterator listIterator() {
return new TwoWayLinkedListIterator();
}
public ListIterator listIterator(int index) {
return new TwoWayLinkedListIterator(index);
}
Here, TwoWayLinkedListIterator is a private class similar to LinkedListIterator in MyLinkedList.java. It
defines a custom iterator for TwoWayLinkedList. Make sure to implement methods previous(),
previousIndex(), and hasPrevious() similar to next(), nextIndex(), and hasNext() methods in MyLinkedList
class.
All the methods dealing with add/remove may need to be modified to handle both next and previous
fields.
Implement a new class named TestMyTwoWayLinkedList to test your two-way linked list with Double as
the concert type for the elements in the linked list.
Good luck and happy programming!
11/9/21, 9:12 PM
https://learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.com/5dfd4f5d9105a/9299818?X-Blackboard-Expiration=163653…
public class MyLinkedList implements MyList {
protected Node head, tail;
protected int size = 0; // Number of elements in the list
/** Create an empty list */
public MyLinkedList() {
}
/** Create a list from an array of objects */
public MyLinkedList(E[] objects) {
for (int i = 0; i < objects.length; i++)
add(objects[i]);
}
/** Return the head element in the list */
public E getFirst() {
if (size == 0) {
return null;
}
else {
return head.element;
}
}
/** Return the last element in the list */
public E getLast() {
if (size == 0) {
return null;
}
else {
return tail.element;
}
}
/** Add an element to the beginning of the list */
public void addFirst(E e) {
Node newNode = new Node(e); // Create a new node
newNode.next = head; // link the new node with the head
head = newNode; // head points to the new node
size++; // Increase list size
}
if (tail == null) // the new node is the only node in list
tail = head;
/** Add an element to the end of the list */
public void addLast(E e) {
Node newNode = new Node(e); // Create a new for element e
if (tail == null) {
head = tail = newNode; // The new node is the only node in list
}
else {
tail.next = newNode; // Link the new with the last node
tail = newNode; // tail now points to the last node
}
}
size++; // Increase size
@Override /** Add a new element at the specified index
* in this list. The index of the head element is 0 */
public void add(int index, E e) {
if (index == 0) {
https://learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.com/5dfd4f5d9105a/9299818?X-Blackboard-Expiration=1636534800000&X-Blackb…
1/4
11/9/21, 9:12 PM
}
https://learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.com/5dfd4f5d9105a/9299818?X-Blackboard-Expiration=163653…
addFirst(e);
}
else if (index >= size) {
addLast(e);
}
else {
Node current = head;
for (int i = 1; i < index; i++) {
current = current.next;
}
Node temp = current.next;
current.next = new Node(e);
(current.next).next = temp;
size++;
}
/** Remove the head node and
* return the object that is contained in the removed node. */
public E removeFirst() {
if (size == 0) {
return null;
}
else {
E temp = head.element;
head = head.next;
size--;
if (head == null) {
tail = null;
}
return temp;
}
}
/** Remove the last node and
* return the object that is contained in the removed node. */
public E removeLast() {
if (size == 0) {
return null;
}
else if (size == 1) {
E temp = head.element;
head = tail = null;
size = 0;
return temp;
}
else {
Node current = head;
for (int i = 0; i < size - 2; i++) {
current = current.next;
}
}
}
E temp = tail.element;
tail = current;
tail.next = null;
size--;
return temp;
@Override /** Remove the element at the specified position in this
* list. Return the element that was removed from the list. */
public E remove(int index) {
if (index < 0 || index >= size) {
https://learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.com/5dfd4f5d9105a/9299818?X-Blackboard-Expiration=1636534800000&X-Blackb…
2/4
11/9/21, 9:12 PM
https://learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.com/5dfd4f5d9105a/9299818?X-Blackboard-Expiration=163653…
return null;
}
else if (index == 0) {
return removeFirst();
}
else if (index == size – 1) {
return removeLast();
}
else {
Node previous = head;
for (int i = 1; i < index; i++) {
previous = previous.next;
}
}
}
Node current = previous.next;
previous.next = current.next;
size--;
return current.element;
@Override /** Override toString() to return elements in the list */
public String toString() {
StringBuilder result = new StringBuilder("[");
Node current = head;
for (int i = 0; i < size; i++) {
result.append(current.element);
current = current.next;
if (current != null) {
result.append(", "); // Separate two elements with a comma
}
else {
result.append("]"); // Insert the closing ] in the string
}
}
}
return result.toString();
@Override /** Clear the list */
public void clear() {
size = 0;
head = tail = null;
}
@Override /** Return true if this list contains the element e */
public boolean contains(Object e) {
// Left as an exercise
return true;
}
@Override /** Return the element at the specified index */
public E get(int index) {
// Left as an exercise
return null;
}
@Override /** Return the index of the first matching element in
* this list. Return -1 if no match. */
public int indexOf(Object e) {
// Left as an exercise
return 0;
}
https://learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.com/5dfd4f5d9105a/9299818?X-Blackboard-Expiration=1636534800000&X-Blackb…
3/4
11/9/21, 9:12 PM
https://learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.com/5dfd4f5d9105a/9299818?X-Blackboard-Expiration=163653…
@Override /** Return the index of the last matching element in
* this list. Return -1 if no match. */
public int lastIndexOf(E e) {
// Left as an exercise
return 0;
}
@Override /** Replace the element at the specified position
* in this list with the specified element. */
public E set(int index, E e) {
// Left as an exercise
return null;
}
@Override /** Override iterator() defined in Iterable */
public java.util.Iterator iterator() {
return new LinkedListIterator();
}
private class LinkedListIterator
implements java.util.Iterator {
private Node current = head; // Current index
@Override
public boolean hasNext() {
return (current != null);
}
@Override
public E next() {
E e = current.element;
current = current.next;
return e;
}
}
@Override
public void remove() {
// Left as an exercise
}
protected static class Node {
E element;
Node next;
}
}
public Node(E element) {
this.element = element;
}
@Override /** Return the number of elements in this list */
public int size() {
return size;
}
https://learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.com/5dfd4f5d9105a/9299818?X-Blackboard-Expiration=1636534800000&X-Blackb…
4/4
11/9/21, 9:12 PM
https://learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.com/5dfd4f5d9105a/9299819?X-Blackboard-Expiration=163653…
import java.util.Collection;
public interface MyList extends java.util.Collection {
/** Add a new element at the specified index in this list */
public void add(int index, E e);
/** Return the element from this list at the specified index */
public E get(int index);
/** Return the index of the first matching element in this list.
* Return -1 if no match. */
public int indexOf(Object e);
/** Return the index of the last matching element in this list
* Return -1 if no match. */
public int lastIndexOf(E e);
/** Remove the element at the specified position in this list
* Shift any subsequent elements to the left.
* Return the element that was removed from the list. */
public E remove(int index);
/** Replace the element at the specified position in this list
* with the specified element and returns the new set. */
public E set(int index, E e);
@Override /** Add a new element at the end of this list */
public default boolean add(E e) {
add(size(), e);
return true;
}
@Override /** Return true if this list contains no elements */
public default boolean isEmpty() {
return size() == 0;
}
@Override /** Remove the first occurrence of the element e
* from this list. Shift any subsequent elements to the left.
* Return true if the element is removed. */
public default boolean remove(Object e) {
if (indexOf(e) >= 0) {
remove(indexOf(e));
return true;
}
else
return false;
}
@Override
public default boolean containsAll(Collection c) {
// Left as an exercise
return true;
}
@Override
public default boolean addAll(Collection c) {
// Left as an exercise
https://learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.com/5dfd4f5d9105a/9299819?X-Blackboard-Expiration=1636534800000&X-Blackb…
1/2
11/9/21, 9:12 PM
}
https://learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.com/5dfd4f5d9105a/9299819?X-Blackboard-Expiration=163653…
return true;
@Override
public default boolean retainAll(Collection c) {
// Left as an exercise
return true;
}
@Override
public default Object[] toArray() {
// Left as an exercise
return null;
}
}
@Override
public default T[] toArray(T[] array) {
// Left as an exercise
return null;
}
https://learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.com/5dfd4f5d9105a/9299819?X-Blackboard-Expiration=1636534800000&X-Blackb…
2/2
Top-quality papers guaranteed
100% original papers
We sell only unique pieces of writing completed according to your demands.
Confidential service
We use security encryption to keep your personal data protected.
Money-back guarantee
We can give your money back if something goes wrong with your order.
Enjoy the free features we offer to everyone
-
Title page
Get a free title page formatted according to the specifics of your particular style.
-
Custom formatting
Request us to use APA, MLA, Harvard, Chicago, or any other style for your essay.
-
Bibliography page
Don’t pay extra for a list of references that perfectly fits your academic needs.
-
24/7 support assistance
Ask us a question anytime you need to—we don’t charge extra for supporting you!
Calculate how much your essay costs
What we are popular for
- English 101
- History
- Business Studies
- Management
- Literature
- Composition
- Psychology
- Philosophy
- Marketing
- Economics