package com.github.ZhoufeifeiJAVA.coding2017.basic; public class MyLinkedList implements List { private Node head,tail; private int size = 0; public void add(Object o){ if(size == 0){ head = new Node(); tail = head; head.data = o; } else{ Node newNode = new Node(); newNode.data = o; newNode.next = null; tail.next = newNode; tail = newNode; } size ++; } public void add(int index , Object o)throws IndexOutOfBoundsException{ if(index>size || index<0) throw new IndexOutOfBoundsException("the index is bigger than the size of MyLinkedList"); Node newNode = new Node(); newNode.data = o; if(index == 0){ newNode.next = head; head = newNode; } else{ int i = 0; Node pointer = head; while(i<index-1){ i++; pointer = pointer.next; } newNode.next = pointer.next; pointer.next = newNode; } size++; } public Object get(int index){ if(index<0 || index>size-1) return null; Node pointer = head; while(index>0){ pointer = pointer.next; index --; } return pointer.data; } public Object remove(int index)throws IndexOutOfBoundsException{ if(index<0 || index>size-1) throw new IndexOutOfBoundsException("the index is not legal"); Node pointer = head; if(index == 0){ head = head.next; size --; return pointer.data; } else{ while(index>1){ pointer = pointer.next; index --; } Node temp = pointer.next; pointer.next = pointer.next.next; size --; return temp.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); } private static class Node{ Object data; Node next; } private class MyLinkedListIterator implements Iterator{ private Node pointer; MyLinkedListIterator(){ pointer = head; } public boolean hasNext() { if(pointer.next != null) return true; else return false; } public Object next() { Node temp = pointer; pointer = pointer.next; return temp.data; } } public Iterator iterator(){ return new MyLinkedListIterator(); } //public void showData(int index){ // System.out.println("the data of "+index+" is "+get(index).data); //} }