diff --git a/src/dataANDcalc/java/LinkedList/CircleLinkedList.java b/src/dataANDcalc/java/LinkedList/CircleLinkedList.java new file mode 100644 index 0000000..6211fdd --- /dev/null +++ b/src/dataANDcalc/java/LinkedList/CircleLinkedList.java @@ -0,0 +1,136 @@ +package LinkedList; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class CircleLinkedList { + + private JosephNode first; + + private JosephNode current; + + private List outList = new ArrayList<>(); + + public void add(JosephNode node){ + if (first == null){ + first = node; + first.next = first; + current = first; + return; + } + current.next = node; + node.next = first; + current = node; + } + + private void show(){ + JosephNode temp = first; + if (first == null){ + System.out.println("该环形链表不存在节点"); + } + while (true){ + System.out.println(temp.toString()); + if (temp.next == first){ + return; + } + temp = temp.next; + } + } + + private void joseph(int m){ + JosephNode temp = first; + int count = 1; + while (true) { + if (temp.next == temp){ + break; + } + count ++; + if (count == m){ + outList.add(temp.next.name); + temp.next = temp.next.next; + temp = temp.next; + count = 1; + } + } + + System.out.print("出队顺序:"); + for(String name : outList){ + System.out.print(name + ";"); + } + } + + + public static void main(String[] args) { + CircleLinkedList circleLinkedList = new CircleLinkedList(); + Scanner scan = new Scanner(System.in); + while (true) { + System.out.println("a添加节点, s查看节点, j约瑟夫队列 exit退出:"); + String handle = scan.next(); + if ("exit".equals(handle)){ + break; + } + if ("a".equals(handle)){ + System.out.println("请输入节点编号:"); + int no = scan.nextInt(); + System.out.println("请输入节点名称:"); + String name = scan.next(); + CircleLinkedList.JosephNode node = new CircleLinkedList.JosephNode(no,name); + circleLinkedList.add(node); + } + if ("s".equals(handle)){ + circleLinkedList.show(); + } + if ("j".equals(handle)){ + System.out.println("请输入出队报数数字:"); + int m = scan.nextInt(); + circleLinkedList.joseph(m); + } + } + scan.close(); + } + + public static class JosephNode{ + private int nodeId; + private String name; + private JosephNode next; + + public JosephNode(int nodeId, String name) { + this.nodeId = nodeId; + this.name = name; + } + + public int getNodeId() { + return nodeId; + } + + public void setNodeId(int nodeId) { + this.nodeId = nodeId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public JosephNode getNext() { + return next; + } + + public void setNext(JosephNode next) { + this.next = next; + } + + @Override + public String toString() { + return "JosephNode{" + + "nodeId=" + nodeId + + ", name='" + name + '\'' + + ", next=" + next.nodeId + ":" + next.name + + '}'; + } + } +}