package com.coding.basic;
/**
* 2017/2/24
* @author 236995728
* 单链表
*/
public class LinkedList implements List {
private Node head = new Node(null,null);
private Node current = new Node(null, null);
private int size = 0;
/**
* 在尾节点添加节点
*/
@Override
public void add(Object o){
Node newNode = new Node(null,o);
if(head.next == null){
head.next = newNode;
}else{
current.next = newNode;
}
current = newNode;
size ++;
}
/**
* 按照索引添加节点
*/
@Override
public void add(int index , Object o){
if(index <0 || index > size){
throw new IndexOutOfBoundsException("param invalid");
}
Node node = head;
Node newNode = new Node(null,o);
for(int i=0; i<index-1; i++){
node = node.next;
}
newNode.next = node.next;
node.next = newNode;
size ++;
}
/**
* 根据索引获取节点
*/
@Override
public Object get(int index){
if(index <0 || index > size){
throw new IndexOutOfBoundsException("param invalid");
}
Node node = head;
for(int i=0; i<index; i++){
node = node.next;
}
return node.data;
}
/**
* 根据索引删除节点
*/
@Override
public Object remove(int index){
if(index <0 || index > size){
throw new IndexOutOfBoundsException("param invalid");
}
Node node = head;
Node nextNode = null;
Object o = null;
for(int i=0; i<index-1; i++){
node = node.next;
}
nextNode = node.next.next;
o = node.next.data;
node.next = nextNode;
size --;
return o;
}
/**
* 返回节点的个数
*/
@Override
public int size(){
return size;
}
/**
* 添加第一个节点
* @param o
*/
public void addFirst(Object o){
add(1,o);
}
/**
* 添加最后一个节点
* @param o
*/
public void addLast(Object o){
add(size,o);
}
/**
* 移除第一个节点
* @return
*/
public Object removeFirst(){
Object o = remove(1);
return o;
}
/**
* 移除最后一个节点
* @return
*/
public Object removeLast(){
Object o = remove(size);
return o;
}
/**
*
* @return
*/
public Iterator iterator(){
return null;
}
/**
* 节点类
* @author Administrator
*
*/
private static class Node{
Object data;
Node next;
Node(Node next, Object data){
this.next = next;
this.data = data;
}
}
}