• 链表 -- 循环链表(线性表)


    1,循环列表只是单向链表的最后节点地址指向第一个节点。

    2,Node 类

    public class Node {
    
        String name;
        
        Node next;
        
        public Node(){
            
        }
        
        public Node(String name){
            this.name = name;
            this.next = null;
        }
    }

    3,链表类

    public class CLink {
    
        int size;
    
        Node first;
    
        public CLink() {
            this.size = 0;
        }
    
        public boolean isEmpty() {
            return first == null;
        }
    
        public void addNode(String name) {
            if (first == null) {
                first = new Node(name);
                first.next = first;
                size++;
            } else {
                Node newNode = new Node(name);
                Node temp = first;
                while (temp.next != first) {
                    temp = temp.next;
                }
                newNode.next = first;
                temp.next = newNode;
                size++;
            }
        }
    
        public void removeNode(String name) {
            if (first == null) {
                return;
            }
            // 删除链表头
            if (first.name.equals(name)) {
                Node temp = first;
                while (temp.next != first) {
                    temp = temp.next;
                }
                first = first.next;
                temp.next = first;
                size--;
                return;
            }
            // 删除链表尾
            Node temp = first;
            Node p = null;
            while (temp.next != first) {
                p = temp;
                temp = temp.next;
            }
            if (temp.name.equals(name)) {
                p.next = first;
                size--;
                return;
            }
            // 删除链表中间
            Node tem = first;
            while (!tem.next.name.equals(name)) {
                tem = tem.next;
            }
            tem.next.next = tem.next;
            size--;
        }
    
        public void insertNode(String data, String name) {
            // 插入到指定位置之后
            Node temp = first;
            while (!temp.name.equals(data)) {
                temp = temp.next;
            }
            Node newNode = new Node(name);
            newNode.next = temp.next;
            temp.next = newNode;
            size++;
        }
    
        public void display() {
            Node temp = first;
            if(temp.next == first){
                System.out.println(temp.name+"   ==>:   "+temp.next.name);
                return;
            }
            
            while (temp.next != first) {
                System.out.println(temp.name+"   ==>:   "+temp.next.name);
                temp = temp.next;
            }
            System.out.println(temp.name+"   ==>:   "+temp.next.name);
        }
    
        public void insertFirst(String name) {
            // 插入到链表的第一个位置
            Node newNode = new Node(name);
            newNode.next = first;
            first = newNode;
            if(first.next == null){
                first.next = first;
                size++;
                return;
            }
            Node second = first.next;
            while (second.next != first.next) {
                second = second.next;
            }
            second.next = first;
            size++;
        }
    }

    4,测试类

    public class Ctest {
    
        public static void main(String[] args) {
            CLink clink = new CLink();
            clink.insertFirst("外县典吏");
            clink.addNode("翰林院待诏");
            clink.addNode("各部院九品笔贴式");
            clink.addNode("翰林院典簿");
            clink.addNode("太医院御医");
            clink.addNode("翰林院检讨");
            clink.addNode("翰林院修编");
            clink.addNode("翰林院修撰");
            clink.addNode("国子监司业");
            clink.addNode("鸿胪寺少卿");
            clink.addNode("光禄寺少卿");
            clink.addNode("翰林院侍读学士");
            clink.addNode("大理寺少卿");
            clink.addNode("光禄寺卿");
            clink.addNode("都察院左副都御史");
            clink.addNode("各省巡抚");
            clink.addNode("各省巡抚");
            clink.addNode("太子少傅");
            clink.addNode("少师");
            clink.addNode("太师");
            clink.display();
            
            System.out.println("================我是分界线================");
            
            clink.removeNode("太师");
            clink.display();
            
            
            System.out.println("================我是分界线================");
            
            clink.removeNode("外县典吏");
            clink.display();
            
            
            clink.insertNode("少师", "太师");
            clink.display();
            
            
            System.out.println(clink.size);
            
        }
    }


    5,打印结果

    外县典吏   ==>:   翰林院待诏
    翰林院待诏   ==>:   各部院九品笔贴式
    各部院九品笔贴式   ==>:   翰林院典簿
    翰林院典簿   ==>:   太医院御医
    太医院御医   ==>:   翰林院检讨
    翰林院检讨   ==>:   翰林院修编
    翰林院修编   ==>:   翰林院修撰
    翰林院修撰   ==>:   国子监司业
    国子监司业   ==>:   鸿胪寺少卿
    鸿胪寺少卿   ==>:   光禄寺少卿
    光禄寺少卿   ==>:   翰林院侍读学士
    翰林院侍读学士   ==>:   大理寺少卿
    大理寺少卿   ==>:   光禄寺卿
    光禄寺卿   ==>:   都察院左副都御史
    都察院左副都御史   ==>:   各省巡抚
    各省巡抚   ==>:   各省巡抚
    各省巡抚   ==>:   太子少傅
    太子少傅   ==>:   少师
    少师   ==>:   太师
    太师   ==>:   外县典吏
    ================我是分界线================
    外县典吏   ==>:   翰林院待诏
    翰林院待诏   ==>:   各部院九品笔贴式
    各部院九品笔贴式   ==>:   翰林院典簿
    翰林院典簿   ==>:   太医院御医
    太医院御医   ==>:   翰林院检讨
    翰林院检讨   ==>:   翰林院修编
    翰林院修编   ==>:   翰林院修撰
    翰林院修撰   ==>:   国子监司业
    国子监司业   ==>:   鸿胪寺少卿
    鸿胪寺少卿   ==>:   光禄寺少卿
    光禄寺少卿   ==>:   翰林院侍读学士
    翰林院侍读学士   ==>:   大理寺少卿
    大理寺少卿   ==>:   光禄寺卿
    光禄寺卿   ==>:   都察院左副都御史
    都察院左副都御史   ==>:   各省巡抚
    各省巡抚   ==>:   各省巡抚
    各省巡抚   ==>:   太子少傅
    太子少傅   ==>:   少师
    少师   ==>:   外县典吏
    ================我是分界线================
    翰林院待诏   ==>:   各部院九品笔贴式
    各部院九品笔贴式   ==>:   翰林院典簿
    翰林院典簿   ==>:   太医院御医
    太医院御医   ==>:   翰林院检讨
    翰林院检讨   ==>:   翰林院修编
    翰林院修编   ==>:   翰林院修撰
    翰林院修撰   ==>:   国子监司业
    国子监司业   ==>:   鸿胪寺少卿
    鸿胪寺少卿   ==>:   光禄寺少卿
    光禄寺少卿   ==>:   翰林院侍读学士
    翰林院侍读学士   ==>:   大理寺少卿
    大理寺少卿   ==>:   光禄寺卿
    光禄寺卿   ==>:   都察院左副都御史
    都察院左副都御史   ==>:   各省巡抚
    各省巡抚   ==>:   各省巡抚
    各省巡抚   ==>:   太子少傅
    太子少傅   ==>:   少师
    少师   ==>:   翰林院待诏
    翰林院待诏   ==>:   各部院九品笔贴式
    各部院九品笔贴式   ==>:   翰林院典簿
    翰林院典簿   ==>:   太医院御医
    太医院御医   ==>:   翰林院检讨
    翰林院检讨   ==>:   翰林院修编
    翰林院修编   ==>:   翰林院修撰
    翰林院修撰   ==>:   国子监司业
    国子监司业   ==>:   鸿胪寺少卿
    鸿胪寺少卿   ==>:   光禄寺少卿
    光禄寺少卿   ==>:   翰林院侍读学士
    翰林院侍读学士   ==>:   大理寺少卿
    大理寺少卿   ==>:   光禄寺卿
    光禄寺卿   ==>:   都察院左副都御史
    都察院左副都御史   ==>:   各省巡抚
    各省巡抚   ==>:   各省巡抚
    各省巡抚   ==>:   太子少傅
    太子少傅   ==>:   少师
    少师   ==>:   太师
    太师   ==>:   翰林院待诏
    19
  • 相关阅读:
    Linux IO模型
    linux进程管理
    shell之判断文件是否存在
    python之hashlib模块(MD5校验)
    Docker实现退出container后保持继续运行的解决办法
    Pycharm上python运行和unittest运行两种执行方式解析
    Linux du与df命令的差异
    Linux lsof命令详解
    Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
    理解Python中的闭包
  • 原文地址:https://www.cnblogs.com/pickKnow/p/9590794.html
Copyright © 2020-2023  润新知