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