数据结构(二)之链表
时间:2019-04-18
本文章向大家介绍数据结构(二)之链表,主要包括数据结构(二)之链表使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.单链表
package cn.liusong.Array; public class Node { int data; Node next; public Node(int data) { this.data = data; } //为节点追加节点 public Node append(Node node) { //当前节点 Node currentNode = this; //循环向后找 while (true) { //取出下一个节点 Node nextNode = currentNode.next; //如果下一个节点为null,当前节点为最后的节点 if (nextNode == null) { break; } //赋给当前节点 currentNode = nextNode; } //把需要追加的节点到当前找到的节点的下一个节点 currentNode.next = node; return this; } public Node next() { return this.next; } public void show() { Node currentNode = this; while (true) { System.out.print(currentNode.data + "->"); Node newNext = currentNode.next; currentNode = newNext; if (currentNode == null) { System.out.print("null"); System.out.println(" "); break; } } } //删除节点 public void removeNext() { // 取出下下一个节点信息 Node newNext = next.next; //把下下一个节点的信息给当前节点 next = newNext; } //取出节点数据 public int getData() { return this.data; } //插入一个新节点 public void after(Node node) { //取出下一个节点作为下下一个节点 Node nextNext = next; //插入新的节点作为下一个节点 this.next = node; //取出下下一个节点连在下一个节点之后 node.next = nextNext; } }
测试链表功能
package cn.liusong.Array; public class TestNode { public static void main(String [] args){ //创建节点 Node n1 = new Node(1) ; Node n2 = new Node(2) ; Node n3 = new Node(3) ; Node n4 = new Node(4) ; Node n5 = new Node(5) ; //追加节点 n1.append(n2).append(n3).append(n4); //显示节点链 n1.show() ; //取出节点 // System.out.println(n1.next().next().getData()); n1.next.removeNext(); n1.show(); n1.after(n5); n1.show(); } }
测试结果
2.双链表
package cn.liusong.Array; public class DoubleNode { DoubleNode pre = this ; DoubleNode next = this ; int data ; public DoubleNode(int data){ this.data = data ; } //增加一个节点 public void after(DoubleNode node){ //当前节点的下一个节点作为下下一个节点 DoubleNode nextNext = next ; //把新的节点作为当前节点的下一个节点 this.next = node ; //把当前节点作为新节点的前一个节点 node.pre = this ; //把下下一个节点作为新节点的后一个节点 node.next = nextNext ; //让原来的下一个节点作为上一个节点的新节点 nextNext.pre = node ; } //下一个节点 public DoubleNode getNext(){ return this.next; } //获取上一个节点 public DoubleNode getPre(){ return this.pre ; } //获取数据 public int getData(){ return this.data ; } }
测试双链表
package cn.liusong.Array; public class TestDoubleNode { public static void main(String[] args){ DoubleNode n1 = new DoubleNode(1) ; DoubleNode n2 = new DoubleNode(2) ; DoubleNode n3 = new DoubleNode(3) ; //追加节点 n1.after(n2); n2.after(n3); //查看上一个,下一个和自己节点的内容 System.out.println(n2.pre.getData()); System.out.println(n2.getData()); System.out.println(n2.next.getData()); System.out.println(n3.next.getData()); System.out.println(n1.pre.getData()); } }
结果
循环链表
package cn.liusong.Array; public class LoopNode { int data; LoopNode next = this; public LoopNode(int data) { this.data = data; } //删除节点 public void removeNext() { // 取出下下一个节点信息 LoopNode newNext = next.next; //把下下一个节点的信息给当前节点 next = newNext; } //取出节点数据 public int getData() { return this.data; } //插入一个新节点 public void after(LoopNode node) { //取出下一个节点作为下下一个节点 LoopNode nextNext = next; //插入新的节点作为下一个节点 this.next = node; //取出下下一个节点连在下一个节点之后 node.next = nextNext; } }
测试循环链表
package cn.liusong.Array; public class TestLoopNode { public static void main(String[] args){ LoopNode n1 = new LoopNode(1) ; LoopNode n2 = new LoopNode(2) ; LoopNode n3 = new LoopNode(3) ; LoopNode n4 = new LoopNode(4) ; LoopNode n5 = new LoopNode(5) ; n1.after(n2); n2.after(n3); n3.after(n4); n4.after(n5); System.out.println(n1.next.getData()); System.out.println(n2.next.getData()); System.out.println(n3.next.getData()); System.out.println(n4.next.getData()); System.out.println(n5.next.getData()); } }
测试结果
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android开发实现生成excel的方法详解
- Android ToolBar 修改边距的实现方法
- Android 自定义view实现TopBar效果
- Android 客户端RSA加密的实现方法
- Android圆形头像拍照后“无法加载此图片”的问题解决方法(适配Android7.0)
- Android 中Failed to read key from keystore解决办法
- Android圆角按钮的制作方法
- Android计时器控件Chronometer应用实例
- Android 中利用 ksoap2 调用 WebService的示例代码
- Android自定义View展示Wifi信号强弱指示方法示例
- android事件分发机制的实现原理
- Android 在子线程中更新UI的几种方法示例
- WebView设置WebViewClient的方法
- Android星级评分条的实现代码
- Android模仿美团顶部的滑动菜单实例代码