示例图:
代码:
package com.ldp.collection.demo01; import org.junit.Test; /** * @author 姿势帝-博客园 * @address https://www.cnblogs.com/newAndHui/ * @WeChat 851298348 * @create 04/05 6:03 * @description */ public class Test04LinkedList { /** * 双向链表理解 */ @Test public void test01() { // 定义三个节点 Node node1 = new Node("张无忌"); Node node2 = new Node("赵敏"); Node node3 = new Node("周芷若"); // 将节点node1->node2->node3 依次使用双向链表链接 // node1->node2 node1.next = node2; // 节点1的下一个元素是节点2 node2.prev = node1; // 节点2的上一个元素是节点1 // node2->node3 node2.next = node3; // 节点2的下一个元素是节点3 node3.prev = node2; // 节点3的上一个元素是节点2 Node first = node1;// 头节点为node1 Node last = node3; // 尾节点为node3 printNode(first, true); // 从头到尾 printNode(last, false); // 从尾到头遍历 System.out.println("尾部添加一个元素:小昭"); Node node4 = new Node("小昭"); last.next = node4; node4.prev = last; last = node4; printNode(first, true); System.out.println("头部添加一个元素:张三丰"); Node node5 = new Node("张三丰"); node5.next = first; first.prev = node5; first = node5; printNode(first, true); // 在中间添加一个节点 System.out.println("在node1[张无忌]与node2[赵敏]之前添加一个:node6[金毛狮王]"); Node node6 = new Node("金毛狮王"); node1.next = node6; // 张无忌的下一个是金毛狮王 node6.prev = node1; // 金毛狮王的上一个是张无忌 node6.next = node2; // 金毛狮王的下一个是赵敏 node2.prev = node6; // 赵敏的上一个是金毛狮王 printNode(first, true); } /** * 节点遍历 * * @param node 遍历的节点 * @param flag flag=true表示从头到尾遍历,flag=false从尾到头遍历 */ public void printNode(Node node, boolean flag) { System.out.println("节点遍历开始......"); while (true) { if (node == null) break; System.out.println("当前节点数据为:" + node.item); if (flag) { node = node.next; // 指向下一个节点,从头到尾遍历 } else { node = node.prev; // 指向上一个节点,从尾到头遍历 } } System.out.println(" "); } } class Node { Node prev; // 上一个节点 Object item; // 数据 Node next;// 下一个节点 public Node(Object item) { this.item = item; } }View Code