Instructions
Requirements and Specifications
Source Code
public class MyLinkedList {
// Create the nested class Node(private)
private class Node {
T item;
Node next;
public Node(T item, Node nextNode) {
this.item = item;
this.next = nextNode;
}
}
private Node first;
private Node current;
private Node previous;
private int size;
public MyLinkedList() {
this.size = 0;
this.first = null;
this.current = null;
this.previous = null;
}
public void addBefore(T item) {
if(size == 0) {
// If the list is empty, then add as the first node
first = new Node(item, null);
} else if(current == null) {
// Add at the end of the list
Node temp = first;
while(temp.next != null) {
temp = temp.next;
}
temp.next = new Node(item, null);
} else {
Node temp = first;
Node prev = null;
while(!temp.equals(current)) {
prev = temp;
temp = temp.next;
}
prev.next = new Node(item, current);
if(size == 1) {
first = previous;
}
}
size++;
}
public void addAfter(T item) {
if(current == null) {
return;
}
Node temp = new Node(item, current.next);
current.next = temp;
size++;
}
public String toString() {
String ret = "";
ret += "Linked List Contents [";
Node temp = first;
int i = 0;
while(temp != null) {
ret += temp .item.toString();
if(i < size-1) {
ret += ", ";
}
temp = temp .next;
i++;
}
ret += "]";
return ret;
}
public T first() {
if(first == null) {
return null;
}
previous = current;
current = first;
return (T) current.item;
}
public T next() {
if(current == null) {
return null;
}
previous = current;
current = current.next;
return (T)current.item;
}
public T current() {
if(current == null) {
return null;
}
return (T)current.item;
}
public T remove() {
if(current == null) {
return null;
}
Node prev = null;
Node temp = first;
while(!temp.equals(current)) {
prev = temp;
temp = temp.next;
}
Node removed = current;
prev.next = removed.next;
previous = removed;
size--;
return (T)removed.item;
}
public boolean contains(T item) {
// Search for item
Node temp = first;
while(temp.next != null) {
if(temp.item.equals(item)) {
return true;
}
temp = temp.next;
}
return false;
}
public int size() {
return size;
}
public boolean isEmpty() {
return size == 0;
}
}