package task01;
import java.util.Arrays;
/**第一周作业
* 自己实现一个 LinkedList
* Created by eurry on 2017/2/26.
*/
public class LinkedList {
private int size = 0;
private Node head=null;
public void add(Object o){
if(size == 0){
head = new Node(o);
}else{
Node next = head;
while(next.next != null){
next = next.next;
}
next.next = new Node(o);
}
size++;
}
public void add(int index, Object o){
if(index <= size){
if(size == 0){
add(o);
}else{
if(index==0){
addFirst(o);
}else if(index==size){
add(o);
}else{
Node next = head;
for(int i=0; i<size; i++){
Node temp = next.next;
if(i==index-1){
next.next = new Node(o);
next.next.next = temp;
}
next = next.next;
}
size++;
}
}
}else{
throw new IndexOutOfBoundsException("越界");
}
}
public void addFirst(Object o){
Node newHead = new Node(o);
newHead.next = head;
head = newHead;
size++;
}
public Object get(int index){
Node ele = null;
Node next = head;
for(int i=0; i<size; i++){
if(i == index)
ele = next;
next = next.next;
}
return ele.element;
}
public Object remove(int index){
if(index < size){
Node re = null;
if(index==0){
re = head;
head = head.next;
}else{
Node prev = null;
Node next = head;
for(int i=0; i<size; i++){
if(i == index-1)
prev = next;
next = next.next;
}
re = prev.next;
prev.next = prev.next.next;
}
size--;
return re.element;
}else{
throw new IndexOutOfBoundsException("越界");
}
}
public Object removeFirst(){
Object obj = head.element;
head = head.next;
size--;
return obj;
}
public Object removeLast(){
Node prev = null;
Node next = head;
for(int i=0; i<size; i++){
if(i == size-2)
prev = next;
next = next.next;
}
Object obj = prev.next.element;
prev.next = null;
size--;
return obj;
}
public int size(){
return size;
}
public String toString(){
String str = "";
if(size > 0){
Node ele = null;
Node next = head;
for(int i=0; i<size; i++){
str += next.element.toString() + ",";
next = next.next;
}
str = str.substring(0, str.length()-1);
}
return str;
}
/**
* 静态内部类:节点
*/
private static class Node{
Object element;
Node next = null;
Node(Object o){
this.element = o;
}
}
/**
* 测试
*/
public static void main(String[] strs){
LinkedList list = new LinkedList();
list.add("A");
list.add("B");
list.add(1, "C");
list.add("D");
Object d = list.get(3);
Object dd = list.remove(3);
System.out.println(list.size());
System.out.println(list.toString());
}
}