diff --git a/src/dataANDcalc/java/LinkedList/CircleLinkedList.java b/src/dataANDcalc/java/LinkedList/CircleLinkedList.java index 6211fdd..48388ce 100644 --- a/src/dataANDcalc/java/LinkedList/CircleLinkedList.java +++ b/src/dataANDcalc/java/LinkedList/CircleLinkedList.java @@ -61,6 +61,38 @@ public class CircleLinkedList { } + /** + * @param k + * @param m + * 优化改进约瑟夫队列 + */ + private void joseph(int k, int m){ + JosephNode temp = first; + while (true){ + if (temp.next == first){ + break; + } + temp = temp.next; + } + for(int i = 0; i < k-1; i++){ + temp = temp.next; + first = first.next; + } + while (true) { + if (temp == first){ + break; + } + for(int i = 0; i < m-1; i++){ + temp = temp.next; + first = first.next; + } + System.out.println(first.toString() + "出列"); + first = first.next; + temp.next = first; + } + } + + public static void main(String[] args) { CircleLinkedList circleLinkedList = new CircleLinkedList(); Scanner scan = new Scanner(System.in); @@ -82,9 +114,11 @@ public class CircleLinkedList { circleLinkedList.show(); } if ("j".equals(handle)){ + System.out.println("请输入开始位置:"); + int k = scan.nextInt(); System.out.println("请输入出队报数数字:"); int m = scan.nextInt(); - circleLinkedList.joseph(m); + circleLinkedList.joseph(k,m); } } scan.close();