package com.coding.basic; import java.util.Iterator; public class LinkedList<E> implements List<E> { private Node<E> last; private Node<E> head; private int xsize = 0; public LinkedList() { init(); } private void init() { head = new Node<E>(null,null,null); last = new Node(null,head,null); head.next = last; xsize = 0; } //���������һ�����������ڲ�ʹ��;��index֮ǰ����һ���ڵ� private void add(Node<E> node,int index) { if(index < 0 || index > xsize) { throw new IndexOutOfBoundsException("�±�Խ��"); } node.pre = getNode(index-1); getNode(index-1).next = node; node.next = getNode(index); getNode(index).pre = node; xsize++; } public void add(E e){ add(new Node<E>(e,null,null),xsize); } public void add(int index,E e){ add(new Node<E>(e,null,null),index); } private Node<E> getNode(int index){ Node<E> newNode; int current; if(index == -1) { return head; } else if (index == xsize ){ return last; } else { current = 0; newNode = head.next; while (current < index) { newNode = newNode.next; current++; } } return newNode; } public E get(int index) { return getNode(index).e; } public void remove(int index){ Node node = getNode(index); node.pre.next = node.next; node.next.pre=node.pre; xsize--; } public int size(){ return xsize; } public void addFirst(E e){ add(new Node<E>(e,null,null),0); } public void addLast(E e){ add(new Node<E>(e,null,null),xsize); } public void removeFirst(){ remove(0); } public void removeLast(){ remove(xsize); } public Iterator iterator(){ return null; } private static class Node<E>{ public E e; Node<E> next; Node<E> pre; public Node (E e,Node<E> pre,Node<E> next) { this.pre = pre; this.next = next; this.e = e; } } public boolean contains(Node node) { Node mnode = head.next; while(mnode !=null) { if(mnode.equals(node)) { return true; } mnode = mnode.next; } return false; } public boolean isEmpty() { return xsize == 0 ? true:false; } public void clear() { init(); } public boolean contains(E e) { // TODO Auto-generated method stub Node<E> node = null; while((node=(head.next)) != null) { if(e.equals(node)) { return true; } else { node = node.next; } } return false; } }