package cn.java.Mycollection;
/*
- 自定义一个链表
*增加get方法
*增加remove
*插入节点
*增加小的封装,增加泛型
*/
public class FanLinkedList05 {
private Node first;
private Node last;
private int size;
public void add(int index ,E element) {
Node newNode=new Node(element);
Node temp=getNode(index);
if (temp!=null) {
Node up=temp.previous;
up.next=newNode;
newNode.previous=up;
newNode.next=temp;
temp.previous=newNode;
}
}
public void remove(int index) {
Node temp = getNode(index);
if (temp!=null) {
Node up=temp.previous;
Node down=temp.next;
if (up!=null) {
up.next=down;
}
if (down!=null) {
down.previous=up;
}
//被删除的元素是第一个的时候
if (index==0) {
first=down;
}
//被删除的元素是最后一个的时候
if (index==size-1) {
last=up;
}
size--;
}
}
// [a,b,c,d,e,f]
public Object get(int index) {
checkRange(index);
Node temp=getNode(index);
return temp!=null?temp.element:null;
}
private void checkRange(int index) {
if (index<0||index>=size) {
throw new RuntimeException("索引数字不合法"+index);
}
}
public Node getNode(int index) {
Node temp;
if (index<(size>>2)) {
temp=first;
for (int i = 0; i < index; i++) {
temp=temp.next;
}
}else {
temp=last;
for (int i = size-1; index < i; i--) {
temp=temp.previous;
}
}
return temp;
}
//[]
//[“a”]
//[a,b]
//[a,b,c]
public void add(E element) {
//[a]
Node node=new Node(element);
if (first==null) {
// node.previous=null;
// node.next=null;
first=node;
last=node;
}else {
node.previous=last;
node.next=null;
last.next=node;
last=node;
}
size++;
}
@Override
public String toString() {
//[a,b,c] first=a last=c;
StringBuilder sb=new StringBuilder("[");
Node temp=first;
while(temp!=null) {
sb.append(temp.element+",");
temp=temp.next;
}
sb.setCharAt(sb.length()-1, ']');
return sb.toString();
}
public static void main(String[] args) {
FanLinkedList05<String> list01=new FanLinkedList05();
list01.add("a");
list01.add("b");
list01.add("c");
list01.add("d");
list01.add("e");
list01.add("f");
System.out.println(list01);
System.out.println(list01.get(3));
list01.remove(2);
list01.add(3, "老樊");
System.out.println(list01);
}
}