package com.rd.p2p.common.util.liuxin;
public class LinkedList<E> implements List<E> {
private Node head;
private int size;
public void add(E o){
if(size == 0){
head = new Node();
head.data = o;
}else{
Node node = new Node();
node.data = o;
getNode(size-1).next = node;
}
size ++;
}
public void add(int index , E o){
Node node = new Node();
node.data = o;
if(index == 0){
node.next = head;
head = node;
}else{
Node indexNode = getNode(index - 1);
indexNode.next = node;
if(index < size){
node.next = getNode(index);
}
}
size ++;
}
public Object get(int index){
return getNode(index).data;
}
public Object remove(int index){
if(index > size - 1){
throw new ArrayIndexOutOfBoundsException("移除索引超出数组索引边界 " + index + ">" + (size - 1));
}
if(index < 0){
throw new ArrayIndexOutOfBoundsException("索引不能为负数");
}
Node returnNode = null;
if(index == 0){
returnNode = head;
if(head.next != null){
head = head.next;
}else{
head = null;
}
}else{
returnNode = getNode(index);
if(returnNode.next != null){
Node preNode = getNode(index-1);
Node nextNode = getNode(index+1);
preNode.next = nextNode;
}
}
size--;
return returnNode.data;
}
public int size(){
return size;
}
public void addFirst(E o){
add(0,o);
}
public void addLast(E o){
add(size-1,o);
}
public Object removeFirst(){
return remove(0);
}
public Object removeLast(){
return remove(size - 1);
}
private Node getNode(int index){
if(index > size - 1){
throw new ArrayIndexOutOfBoundsException("查询索引超出数组索引边界 " + index + ">" + (size - 1));
}
if(index < 0){
throw new ArrayIndexOutOfBoundsException("索引不能为负数");
}
Node tempNode = head;
if(index == 0){
tempNode = head;
}else{
for(int i = 0; i < index; i++){
tempNode = tempNode.next;
}
}
return tempNode;
}
private static class Node{
Object data;
Node next;
}
@Override
public String toString() {
for (int i = 0; i < size; i++) {
System.out.println(get(i));
}
return null;
}
//迭代器
public Iterator iterator(){
return new Iterator() {
private int index = 0;
@Override
public Object next() {
if(index >= size){
throw new ArrayIndexOutOfBoundsException("取出数组索引不能大于等于数组总长度 " + index + ">=" + size);
}
return get(index++);
}
@Override
public boolean hasNext() {
if(size > index){
return true;
}else{
return false;
}
}
};
}
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.toString();
}
}