* 自己写的一个Linked ```java package collection_.list_.linkedList_; import java.util.LinkedList; /** * 模拟一个简单的双向链表 */ public class LinkedList01 { public static void main(String[] args) { Node node1 = new Node("1"); Node node2 = new Node("2"); Node node3 = new Node("3"); node1.next = node2; node2.next = node3; node2.pre = node1; node3.pre = node2; Node first = node1; Node last = node3; bianli1(first); System.out.println("============"); // 遍历从尾到头 bianli2(last); // 添加一个节点 在 1-2之间 1.5 Node node1_5 = new Node("1.5"); node1.next = node1_5; node1_5.next = node2; node2.pre = node1_5; System.out.println("============"); bianli1(first); // 删除一个节点 2 System.out.println("============"); removeNode(node1); first = node1_5; bianli1(first); } // 删除节点 private static void removeNode(Node removeNode) { if(removeNode.next == null) { // 最后一个 removeNode.pre.next = null; return; } if(removeNode.pre == null) { // 第一个 removeNode.next.pre = null; return; } // 在中间 ①将上一个节点的next指向 removeNode 的后一个节点 removeNode.pre.next = removeNode.next; // ② 将后一个节点的 pre 指向 removeNode的前一个节点 removeNode.next.pre = removeNode.pre; } private static void bianli1(Node first) { // 遍历 从头到尾 while (true) { if(first == null) { break; } System.out.println(first); // 将指针指向后面一位 first = first.next; } } private static void bianli2(Node last) { // 遍历 从尾到头 while (true) { if(last == null) { break; } System.out.println(last); // 将指针指向后面一位 last = last.pre; } } } // 定义一个Node类,Node的对象则表示双向链表的一个节点 class Node { public Object item; //真正存放的数据 public Node pre; // 指向上一个节点 public Node next; // 指向下一个节点 public Node(Object name) { this.item = name; } public String toString() { return "node name" + item; } } ```