package coding.week01;
public class LinkedList implements List {
private Node head;
private int size;
public LinkedList(){
head = new Node(new Object(),null,null);
}
public void add(Object o){
Node last = head;
for (int i = 0; i < size; i++) {
last = last.next;
}
Node newNode = new Node(o,null,last);
last.next = newNode;
size++;
}
public void add(int index , Object o){
Node oldNode = getNode(index);
Node newNode = new Node(o, oldNode, oldNode.prev);
oldNode.prev.next = newNode;
oldNode.prev = newNode;
size ++;
}
public Object get(int index){
Node node = getNode(index);
return node.data;
}
private Node getNode(int index){
Node n = head.next;
for (int i = 0; i < index; i++) {
n = n.next;
}
return n;
}
public Object remove(int index){
Node node = getNode(index);
Object o =node.data;
Node prevNode = node.prev;
Node nextNode = node.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
node.next = node.prev =null;
node.data = null;
size --;
return o;
}
public int size(){
return size;
}
public void addFirst(Object o){
add(0,o);
}
public void addLast(Object o){
add(o);
}
public Object removeFirst(){
Object o = remove(0);
return o;
}
public Object removeLast(){
Object o = remove(size);
return o;
}
public Iterator iterator(){
return null;
}
private static class Node{
Object data;
Node next;
Node prev;
public Node(Object o,Node next,Node prev){
this.data = o;
this.next = next;
this.prev = prev;
}
}
@Override
public String toString() {
String s = "{";
Node n = head;
for (int i = 0; i < size; i++) {
n = n.next;
if(i == (size -1)){
s += n.data;
}else{
s += n.data + ",";
}
}
s += "}";
return s;
}
}