/**
* Created by chengbx on 2018/5/18.
* LinkedList其实也就是我们在数据结构中的链表,这种数据结构有这样的特性:
* 分配内存空间不是必须是连续的;
* 插入、删除操作很快,只要修改前后指针就OK了,时间复杂度为O(1);
* 访问比较慢,必须得从第一个元素开始遍历,时间复杂度为O(n);
*/
public class CbxLinkedList {
private Node first;
private Node last;
private int size;
public void add(Object object){
//如果是第一个节点 那么在创建之后 第一个节点 也是最后一个节点
Node n = new Node();
if(first == null){
n.setPrevious(null);
n.setObject(object);
n.setNext(null);
first = n;
last = n;
}else{
//直接往last后面添加新的节点
n.setPrevious(last);
n.setObject(object);
n.setNext(null);
//新增的节点为最后一个节点
last.setNext(n);
last = n;
}
size++;
}
public Object get(int index){
RangeCheck(index);
Node temp = getNodeByindex(index);
return temp.getObject();
}
public int size(){
return size;
}
private void RangeCheck(int index){
if(index >= size){
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public Node getNodeByindex(int index){
Node temp = null;
if(first!=null){
temp = first;
for(int i =0;i<index;i++){
temp = temp.getNext();
}
}
return temp;
}
public void remove(int index){
Node temp = getNodeByindex(index);
Node preNode = temp.getPrevious();
Node nextNode = temp.getNext();
preNode.setNext(nextNode);
nextNode.setPrevious(preNode);
size--;
}
public void add(int index,Object object){
//获取对应索引的节点
Node temp = getNodeByindex(index);
if(temp!=null){
Node preNode = temp.getPrevious();
Node newNode = new Node();
newNode.setPrevious(preNode);
newNode.setObject(object);
newNode.setNext(temp);
preNode.setNext(newNode);
temp.setPrevious(newNode);
}
size++;
}
@Test
public void test(){
CbxLinkedList cbxLinkedList = new CbxLinkedList();
cbxLinkedList.add("aaa");
}
}
class Node{
private Node previous;
private Object object;
private Node next;
public Node getPrevious() {
return previous;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
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;
}
public Node() {
}
public Node(Node previous, Object object, Node next) {
this.previous = previous;
this.object = object;
this.next = next;
}
}