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);
  • 相关阅读:
    Java实现 LeetCode 343 整数拆分(动态规划入门经典)
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 338 比特位计数
    H264(NAL简介与I帧判断)
    分享一段H264视频和AAC音频的RTP封包代码
  • 原文地址:https://www.cnblogs.com/excellencesy/p/8651608.html
Copyright © 2011-2022 走看看