rendered paste bodypackage adts;import java.util.Vector;public class LinkedList implements ListInterface { private class Node { private Object data; // entry in the list private Node next; private Node previous;// link to next node private Node(Object dataPortion) { data = dataPortion; next = null; } private Node(Object dataPortion, Node nextNode) { data = dataPortion; next = nextNode; } } private Node firstNode; // reference to the first node private Node lastNode ; private int length; // current num entries in list public LinkedList() { clear(); } public boolean add(Object newEntry) { Node newNode = new Node(newEntry); if(isEmpty()) { firstNode = newNode; } else { Node lastNode = getNodeAt(length); lastNode.next = newNode; // make last node reference new node } length++; return true; } public boolean addAtTail(Object newEntry) { Node newNode = new Node(newEntry); if(isEmpty()) { firstNode = lastNode = newNode; } else { //Node lastNode = getNodeAt(length); lastNode.next = newNode; } length++; return true; } private Node getNodeAt(int givenPosition) { Node currentNode = firstNode; for(int i=1;i<givenPosition;i++) { currentNode = currentNode.next; } return currentNode; } // end getNodeAt public boolean add(int newPosition, Object newEntry) { boolean isSuccessful = true; if((newPosition >=1) && (newPosition<=length+1)) { Node newNode = new Node(newEntry); /* Case 1: Adding to the start of the list */ if(isEmpty() || (newPosition == 1)) { newNode.next = firstNode; firstNode = newNode; } /* Case 2: newPosition > 1, list not empty */ else { Node nodeBefore = getNodeAt(newPosition-1); Node nodeAfter = nodeBefore.next; newNode.next = nodeAfter; nodeBefore.next = newNode; } length++; } else { isSuccessful = false; } return isSuccessful; } public void clear() { firstNode = null; length = 0; } // end clear public boolean contains(Object anEntry) { boolean result = false; if (!isEmpty() && (anEntry != null) ) { for (Node current = firstNode; current != null ; current = current.next) { if (current.data.equals(anEntry)) return true ; } } return result ; } public void display() { // TODO Auto-generated method stub } public Object getEntry(int givenPosition) { Object result = null ; if (!isEmpty() && (givenPosition <= length) ) { result = getNodeAt(givenPosition).data; } return result ; } public int getLength() { return length; } public boolean isEmpty() { return length == 0; } public boolean isFull() { return false; } public Object remove(int givenPosition) { Node result = null; // return object if((givenPosition >= 1) && (givenPosition <= length)){ Node before = getNodeAt(givenPosition-1); // get entry to be removed. result = before.next ; before.next = before.next.next ; length--; } return result; } public boolean remove(Object objectToRemove) { boolean result = false ; if (!isEmpty()) { for (Node current = firstNode, previous = null; current != null ; previous = current, current = current.next) { if (current.data.equals(objectToRemove)) { result = true ; if (current == firstNode) { firstNode = current.next ; } else { previous.next = current.next ; } length-- ; } } } return result; } public boolean replace(int givenPosition, Object newEntry) { boolean result = false; if((givenPosition >=1) && (givenPosition <= length)){ Node node = getNodeAt(givenPosition); node.data = newEntry ; result = true ; } return result; } public boolean add() { return true; } public boolean swap(Object one, Object two) { boolean result = true; Node temp1 = new Node(one); Node temp2 = new Node(two); if(contains(one) && contains(two)) { for (Node current = firstNode, previous = null; current != null ;previous = current, current = current.next) { if(current.data.equals(one)) { temp1 = previous.next; temp1.next = current.next; temp1.previous = current; } if(current.data.equals(two)) { temp2 = previous.next; temp2.next = current.next; temp2.previous = current; } } for (Node current = firstNode, previous = null; current != null;previous = current, current = current.next) { if(current.data.equals(one)) { previous.next = temp2; current.next = temp2.next; } if(current.data.equals(two)) { previous.next = temp1; current.next = temp2.next; } } return result; } else { return false; } } public Vector getRange(int pos1,int pos2) { Vector v = null; return v; } public boolean addGroup(Vector objects, int start) { boolean result = true; return result; } public int getPos(Object o) { Node temp = firstNode; int pos = 1; boolean result = false; while(!result) { if(temp.data.equals(o)) { result = true; } else { temp = temp.next; pos++; } } return pos; }}