package com.my.list;
/**
* 实现 LinkedList
*
*/
public class LinkedList {
//首节点
Node first = new Node();
//集合大小
int size = 0;
/**
* 添加元素
* @param object
* @return
*/
public Object add(Object object){
if (size == 0) {
first.setObject(object);
}else{
Node previous = first;
Node temp = first.getNext();
while (temp != null) {
previous = temp;
temp = temp.getNext();
}
Node node = new Node();
node.setObject(object);
previous.setNext(node);
}
++size;
return object;
}
/**
* 根据下标添加元素
* @param index
* @param object
* @return
*/
public Object add(int index , Object object){
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException();
}
if (size == 0) {
first.setObject(object);
}else{
if (index == 0) {
Node temp = new Node();
temp.setObject(object);
temp.setNext(first);
first = temp;
}else{
int count = 1;
Node temp = first;
while (temp != null) {
if (count++ == index) {
Node next = temp.getNext();
Node node = new Node();
temp.setNext(node);
node.setObject(object);
node.setNext(next);
break;
}
temp = temp.getNext();
}
}
}
++size;
return object;
}
/**
* 根据下标删除元素
* @param index
* @return
*/
public Object remove(int index){
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
Node node = null;
if (index == 0) {
Node next = first.getNext();
first = next;
node = first;
}else{
int count = 1;
Node temp = first;
while (temp != null) {
if (count++ == index) {
node = temp.getNext();
Node next = node.getNext();
temp.setNext(next);
break;
}
temp = temp.getNext();
}
}
--size;
return node.getObject();
}
/**
* 根据下标获取元素
* @param index
* @return
*/
public Object get(int index) {
Node temp = first;
int count = 0;
while (temp != null) {
if (count++ == index) {
break;
}
temp = temp.getNext();
}
return temp.getObject();
}
/**
* 获取集合大小
* @return
*/
public int size() {
return size;
}
}
/**
* 节点元素
*
*/
class Node{
private Object object ;
private Node next;
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}