zoukankan      html  css  js  c++  java
  • 数据结构(二)之链表

    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());
        }
    }

    测试结果

  • 相关阅读:
    php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)
    php标准库spl栈SplStack如何使用?
    js进阶正则表达式15验证身份证号(|符号的使用:var reg=/^d{17}[d|X]$|^d{15}$/)(str的方法substr)
    一步一步教你自定义博客园(cnblog)界面
    php中foreach源码分析(编译原理)
    php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];)
    前端开发必备调试工具(Chrome的F12自带的功能和firebug插件差不多)
    PHP 根据对象属性进行对象数组的排序(usort($your_data, "cmp");)(inside the class: usort($your_data, array($this, "cmp")))
    如何查看一个网页特定效果的js代码(动画效果可js和css)(页面可以看到js的源代码)
    bsh for android : 北京
  • 原文地址:https://www.cnblogs.com/Lovis/p/10728195.html
Copyright © 2011-2022 走看看