java语言手动实现双向链表:
1、原理图:包含添加的操作
2、核心代码:
/**
* @author wanghuainan
* @date 2022/4/13
*/
public class NanDaoDoubleLinked {
public static void main(String[] args) {
DoubleLinkNodeList linkNodeListAddHead = new DoubleLinkNodeList(0,0);
DoubleLinkNodeList linkNodeListAddTail = new DoubleLinkNodeList(0,0);
/**
* 循环添加数据
*/
for(int i = 1;i < 4 ;i++){
// Node<Integer,Integer> newNode = new Node<>(i,i);
linkNodeListAddHead.addToHead(new Node<>(i,i));
linkNodeListAddTail.addToTail(new Node<>(i,i));
System.out.println("OK");
}
/**
* 删除尾节点数据
*/
linkNodeListAddHead.removeLastNode();
System.out.println();
}
public static class Node<K,V>{
private K key;
private V value;
private Node<K,V> next;
private Node<K,V> last;
public Node(K key,V value){
this.key = key;
this.value = value;
}
}
public static class DoubleLinkNodeList<K,V>{
Node<K,V> head;
Node<K,V> tail;
//双向链表初始化
public DoubleLinkNodeList(K key,V value){
this.head = new Node<>(key,value);
this.tail = new Node<>(key,value);
head.next = tail;
tail.last = head;
}
//在链表头添加数据
public void addToHead(Node<K,V> newNode){
newNode.next = head.next;
newNode.last = head;
head.next.last = newNode;
head.next = newNode;
}
//在链表尾添加数据
public void addToTail(Node<K,V> newNode){
newNode.last = tail.last;
newNode.next = tail;
tail.last.next = newNode;
tail.last = newNode;
}
//删除某个节点(首、尾、或者中间的某个节点)
public void removeNode(Node<K,V> node){
node.next.last = node.last;
node.last.next = node.next;
}
//删除最后一个节点
public void removeLastNode(){
if(head.next == tail){
return;
}
removeNode(tail.last);
}
}
}
图结合代码,大家会一目了然的。