节点的删除插入等基本操作
Mylink
public class Mylink {
private Node first;//第一个节点
private Node end;//最后一个节点
private int size;//节点个数
//用尾插法增加一个节点
public void linkListAdd(Object obj) {
size++;
Node node = new Node(obj);
if(first==null) {
first = node;
end = node;
}else {
end.next = node;
node.previous = end;
end = node;
}
}
//删除一个节点
public void linkListRemove(int index) {
if(index==0) {
first=first.next;
first.previous=null;
}else if(index==size-1){
end=end.previous;
end.next=null;
}else {
Node temp=getNode(index);
temp.previous.next=temp.next;
temp.next.previous=temp.previous;
temp.next=temp.previous=null;
}
size--;
}
//插入一个节点
public void linkListInsert(Object obj , int index) {
Node node = new Node(obj);
if(index==0) {
first.previous=node;
node.next=first;
first=node;
}else if(index==size) {
end.next=node;
end.previous=end;
end=node;
}else {
Node temp=getNode(index);
node.next=temp;
node.previous=temp.previous;
temp.previous.next=node;
temp.previous=node;
}
size++;
}
//返回特定下标的节点
public Node getNode(int index) {
if(index<0||index>size-1) {
throw new RuntimeException("索引不合法:"+index);
}
Node temp=null;
if(index<=(size>>1)) {
temp = first;
for(int i=0 ; i<index ; i++) {
temp = temp.next;
}
}else {
temp = end;
for(int i=size-1 ; i>index ; i--) {
temp = temp.previous;
}
}
return temp;
}
//取得指定下表的节点的内容
public Object get(int index) {
Node temp = getNode(index);
return temp==null?null:temp.element;
}
public static void main(String[] args) {
Mylink linklist = new Mylink();
linklist.linkListAdd("a");
linklist.linkListAdd("b");
linklist.linkListAdd("c");
linklist.linkListAdd("d");
linklist.linkListAdd("e");
System.out.print(linklist);//abcde
System.out.println("链表的长度为:"+linklist.size);//链表的长度为:5
System.out.println("从链表中取得的元素为:"+linklist.get(4));//从链表中取得的元素为:e
linklist.linkListRemove(3);
System.out.print(linklist);//abce
linklist.linkListInsert("f", 4);
System.out.println(linklist);//abcef
}
//打印链表,改写toString方法
public String toString() {
Node temp = first;
while(temp!=null) {
System.out.print(temp.element);
temp = temp.next;
}
return "\n";
}
}
Node
public class Node {
Node previous;
Node next;
Object element;
public Node(Object o){
this.element = o;
}
}