public class doubleLinkedList {
//节点类
private static class Node{
Object value;
Node prev=this;
Node next=this;
Node(Object v){
value=v;
}
public String toString() {
return value.toString();
}
}
private Node head=new Node(null);//头节点
private int size;//链表大小
public void addAfter(Node newNode,Node node) {
newNode.prev=node;
newNode.next=node.next;
newNode.prev.next=newNode;
newNode.next.prev=newNode;
size++;
}
public void addBefore(Node newNode,Node node) {
newNode.prev=node.prev;
newNode.next=node;
newNode.prev.next=newNode;
newNode.next.prev=newNode;
size++;
}
//从表头往后添加
public boolean addFirst(Object o) {
addAfter(new Node(o), head);
return true;
}
//从表头往前添加
public boolean addLast(Object o) {
addBefore(new Node(o), head);
return true;
}
//
public boolean add(Object o) {
return addLast(o);
}
public boolean add(int index,Object o) {
addAfter(new Node(o), getNode(index));
return true;
}
public Node getNode(int index) {
if(index<0||index>=size)
throw new IndexOutOfBoundsException();
Node node=head.next;
for(int i=0;i<index;i++)
node=node.next;
return node;
}
public Object get(int index) {
return getNode(index).value;
}
public boolean remove(int index) {
removeNode(getNode(index));
return true;
}
public boolean removeFirst() {
removeNode(head.next);
return true;
}
public boolean removeLast() {
removeNode(head.prev);
return true;
}
public int size() {
return size;
}
public void removeNode(Node node) {
node.prev.next=node.next;
node.next.prev=node.prev;
node.prev=null;
node.next=null;
size--;
}
public void printList() {
for(int i=0;i<this.size();i++){
System.out.println(getNode(i));
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
doubleLinkedList dlist=new doubleLinkedList();
dlist.add("1");
dlist.add("2");
dlist.add("3");
dlist.printList();
dlist.addFirst("0");
dlist.addLast("5");
dlist.printList();
}
}
数据结构—双链表实现
最新推荐文章于 2024-07-11 15:29:35 发布