1.背景
2.先来认识一下什么是双向链表
示例图:
代码:
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
3.源码解读
完美!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。