zoukankan      html  css  js  c++  java
  • java实现循环链表的增删功能

    java实现循环链表的增删功能,完整代码

    package songyan.test.demo;
    
    public class Demo {
        // java 实现循环链表
        public static void main(String[] args) {
            Node node1 = new Node("name1");
            Node node2 = new Node("name2");
            Node node3 = new Node("name3");
            Node node4 = new Node("name4");
            Node node5 = new Node("name5");
    
            node1.setNextNode(node2);
            node2.setNextNode(node3);
            node3.setNextNode(node4);
            node4.setNextNode(node5);
            node5.setNextNode(node1);
    
            // getNodes(node1);
    
            // 添加node2.5
            Node node11 = new Node("node2.5");
            node11.setNextNode(node2.getNextNode());
            node2.setNextNode(node11);
            // getNodes(node1);
    
            // 删除节点
            node2.setNextNode(node3);
            getNodes(node1);
    
        }
    
        public static void getNodes(Node startNode) {
            // 循环遍历
            Node node = startNode;
            do {
                System.out.println(node.getName());
                node = node.getNextNode();
            } while (node.getNextNode() != startNode.getNextNode());
        }
    }
    
    class Node {
        private String name;
        private Node nextNode;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Node getNextNode() {
            return nextNode;
        }
    
        public void setNextNode(Node nextNode) {
            this.nextNode = nextNode;
        }
    
        Node(String name) {
            this.name = name;
            this.nextNode = null;
        }
    
        Node() {
            this.nextNode = null;
        }
    
    }

    分段解读,

    1,声明节点类【包括节点名称,指针】

    class Node{
        private String name;
        private Node nextNode;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Node getNextNode() {
            return nextNode;
        }
        public void setNextNode(Node nextNode) {
            this.nextNode = nextNode;
        }
        Node(String name)
        {
            this.name=name;
            this.nextNode=null;
        }
        Node()
        {
            this.nextNode=null;
        }
        
        
        
    }

    2,创建节点

    Node node1= new Node("name1");
    Node node2= new Node("name2");
    Node node3= new Node("name3");
    Node node4= new Node("name4");
    Node node5= new Node("name5");

    3,设置指针

    【这里不同于单链表的地方就是要给尾节点设置指向头结点的指针】

    node1.setNextNode(node2);
    node2.setNextNode(node3);
    node3.setNextNode(node4);
    node4.setNextNode(node5);
    node5.setNextNode(node1);
            

    3,循环遍历链表

    注意:结束的条件不同于单链表的地方,

    在单链表中结束条件是nextNode为空,

    然而在这里,尾节点的指针式指向头结

    点的,所以条件是节点的指针指向头结点

        public static void getNodes(Node startNode) {
            // 循环遍历
            Node node = startNode;
            do {
                System.out.println(node.getName());
                node = node.getNextNode();
            } while (node.getNextNode() != startNode.getNextNode());
        }

    4,添加节点

    【这里与单向链表完全相同】

    Node node11=new Node("node2.5");
            node11.setNextNode(node2.getNextNode());
            node2.setNextNode(node11);
            

    4,删除节点

    【这里与单向链表完全相同】

    node2.setNextNode(node3);
  • 相关阅读:
    CSS(十二)--响应式布局
    CSS(十一)-- 手机像素
    CSS(十)-- 弹性盒子
    CSS常用属性
    CSS(九)-- less(css的预处理语言)
    CSS(八)-- 变形(过渡、动画、平移、旋转、缩放)
    HTML(二)-- 表格、表单
    原生javascript实现模拟拖拽事件
    JavaScript检测数据类型及模仿jQuery中的数据类型检测
    JavaScript数组常用方法总结
  • 原文地址:https://www.cnblogs.com/excellencesy/p/8651608.html
Copyright © 2011-2022 走看看