package com.coding.basic; public class LinkedList implements List { private Node head; private Node tail; private int size = 0 ; public void add(Object o){ addLast(o); } public void add(int index, Object o) { if (index == 0) { addFirst(o); } else if (index >= size) { addLast(o); } else { Node node = new Node(); node.data = o; node.next = getNode(index); getNode(index - 1).next = node; size++; } } public Object get(int index) { Node node = getNode(index); return node.data; } public Object remove(int index){ Node currentNode = getNode(index); Node prevNode = getNode(index - 1); Node lastNode = getNode(index + 1); prevNode.next = lastNode; size--; return currentNode.data; } public int size(){ return size; } public void addFirst(Object o){ Node node=new Node(); node.data = o; node.next = head; head = node; size++; } public void addLast(Object o){ Node node=new Node(); node.data = o; node.next = null; Node lastNode = getNode(size-1); lastNode.next = node; size++; } public Object removeFirst(){ Object obj = getNode(0).data; Node node = getNode(1); node.next = head; size--; return obj; } public Object removeLast(){ Object obj = getNode(size - 1).data; Node node = getNode(size - 2); node.next = null; size--; return obj; } //��ȡ�ڵ� public Node getNode(int index){ checkIndex(index); if(index == 0 ){ return head; }else if(index == size -1 ){ return tail; }else{ Node node = head; for(int i=0;i<index;i++){ node = node.next; } return node; } } // �±�Խ���ж� private void checkIndex(int index) { if (index >= size || index < 0) throw new IndexOutOfBoundsException("�����±�Խ��"); } private static class Node { Object data; Node next; } }