2025-01-12 约瑟夫问题(环形链表)

This commit is contained in:
liangjinglin 2025-01-13 00:32:10 +08:00
parent 7bc1fdd338
commit be0ea5b1ea

View File

@ -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<String> 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 +
'}';
}
}
}