package week01.datastructure; public class LinkedList implements List { private Node head; private int size = 0; public void add(Object o){ if(head == null){ head = new Node(o); }else{ Node pos = head; while(pos.next != null){ pos = pos.next; } pos.next = new Node(o); } size++; } public void add(int index , Object o){ if(index < 0 || index >size ) throw new IndexOutOfBoundsException("Index:"+index+",Size"+size); if(index == 0) { Node node = new Node(o); node.next = head; head = node; } else{ Node pos = head; for(int i = 0;i < index-1;i++){ pos = pos.next; } Node node = new Node(o); node.next = pos.next; pos.next = node; } size++; } public Object get(int index){ if(index < 0 || index >=size ) throw new IndexOutOfBoundsException("Index:"+index+",Size"+size); Node pos = head; for(int i = 0;i < index;i++){ pos = pos.next; } return pos.data; } public Object remove(int index){ if(index < 0 || index >=size ) throw new IndexOutOfBoundsException("Index:"+index+",Size:"+size); Node element = head; if(index == 0){ head = head.next; }else{ Node pos = head; for(int i = 0;i < index - 1;i++){ pos = pos.next; } element = pos.next; pos.next = pos.next.next; } size--; return element.data; } public int size(){ return size; } public void addFirst(Object o){ add(0,o); } public void addLast(Object o){ add(size,o); } public Object removeFirst(){ return remove(0); } public Object removeLast(){ return remove(size-1); } public Iterator iterator(){ return new LinkedListIterator(); } class LinkedListIterator implements Iterator{ private Node node = head; private int pos = 0; @Override public boolean hasNext() { return pos < size; } @Override public Object next() { pos++; if(pos != 1){ node = node.next; } return node.data; } } private static class Node{ Object data; Node next; public Node(Object data){ this.data = data; next = null; } } }