package com.rr.java.e2_List;
/**
* Created by isaac_gu on 2016/4/20.
*/
public class MyLinkedList {
private Node first;
private Node last;
private int size;
/**
* 所有的值都是放到节点里面
*
* @param obj
*/
public void add(Object obj) {
Node n = new Node();
if (first == null) {
//第一个节点,pre与next都是null
n.setData(obj);
//记录first与last
first = n;
last = n;
} else {
//直接往last节点后增加新的节点
n.setData(obj);
//pre就是之前的last
n.setPrevious(last);
//next 还是null
n.setNext(null);
//给last记录Next的位置
last.setNext(n);
//当前的对象为last
last = n;
}
size++;
}
/**
* list的长度
*
* @return
*/
public int size() {
return size;
}
/**
* 获得索引位置的值
*
* @param index
* @return
*/
public Object get(int index) {
checkElementIndex(index);
Node node = node(index);
return node.getData();
}
private Node node(int index) {
Node node = null;
if (first != null) {
node = first;
for (int i = 0; i < index; i++) {
node = node.getNext();
}
}
return node;
}
private void checkElementIndex(int index) {
if (!isElementIndex(index))
throw new IndexOutOfBoundsException();
}
private boolean isElementIndex(int index) {
return index >= 0 && index < size;
}
/**
* 删除一个节点
*
* @param index
* @return
*/
public boolean remove(int index) {
//获得目标节点
Node node = node(index);
if (node != null) {
//获得目标节点的上一个以及下一个节点
Node pre = node.getPrevious();
Node next = node.getNext();
//交换值
pre.setNext(next);
next.setPrevious(pre);
//数组减小
size--;
return true;
}
return false;
}
}
class Node {
private Node previous; //前一个节点
private Node next; //下一个节点
private Object data; //当前节点
public Node getPrevious() {
return previous;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
转载于:https://my.oschina.net/u/659286/blog/662995