package com.coding.basic; public class LinkedList implements List { private Node head; private int size; public LinkedList(){ this.head = null; this.size = 0; } public void add(Object o) { Node newNode = new Node(o); if(isEmpty()){ head = newNode; } else{ newNode.next = head; head = newNode; } size++; } public void add(int index, Object o) { if (index < 0 || index > size) throw new IndexOutOfBoundsException("下标越界"); Node indexNode = node(index); Node newNode = new Node(o); if(isEmpty()){ head = newNode; }else { newNode.next = indexNode; indexNode = newNode; } size++; } public Object get(int index) { if (index < 0 || index > size) throw new IndexOutOfBoundsException("下标越界"); return node(index).data; } public Object remove(int index) { Node indexNode = node(index); Node preNode = node(index); preNode.next = indexNode.next; indexNode.next = null; size--; return indexNode.data; } public int size() { return size; } public void addFirst(Object o) { if(o == null){ throw new RuntimeException("不能加入null元素"); } Node newNode = new Node(o); newNode.next = head; size++; } public void addLast(Object o) { Node newNode = new Node(o); Node last = node(size); newNode.next = last.next; last.next = newNode; size++; } public Object removeFirst() { Node oldNode = head; head = head.next; head.next = null; size--; return oldNode.data; } public Object removeLast() { Node oldNode = node(size); Node preNode = node(size - 1); preNode.next = null; size--; return oldNode.data; } public Iterator iterator(int index) { return new Itr(index); } // TODO: 2017/2/24 private class Itr implements com.coding.basic.Iterator { private int nextIndex; public Itr(int index) { this.nextIndex = index; } @Override public boolean hasNext() { return nextIndex < size; } @Override public Object next() { return null; } } private static class Node { public Object data; public Node next; public Node(Object data) { this.data = data; this.next = null; } } Node node(int index) { Node x = head; for (int i = 0; i < index; i++) x = x.next; return x; } // public boolean isEmpty() { return head ==null; } }