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());
- }
- }
测试结果
来源: http://www.bubuko.com/infodetail-3027641.html