• 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);
  • 相关阅读:
    使用jmeter进行性能测试-Jmeter教程及技巧汇总 (转)
    Linux防火墙(Iptables)的开启与关闭
    解决Unable to load R3 module ...VBoxDD.dll (VBoxDD):GetLastError=1790
    Linux如何修改文件/文件夹内所有文件的权限
    php抽象类的简单应用
    php接口和多态的概念以及简单应用
    关于php中数据访问的几点补充
    php中重写和final关键字的使用
    php中static静态关键字的使用
    php对象引用和析构函数的关系
  • 原文地址:https://www.cnblogs.com/excellencesy/p/8651608.html
Copyright © 2020-2023  润新知