1 import java.util.Scanner; 2 3 /** 4 * @name: Node 5 * @description: 问题:L0 L1 L2 L3 Ln--->L0 Ln L1 Ln-1... 6 * 思路:1.定义指向头的恒定指针headFianl,头指针head 当前指针current,当前指针的前一指针currentP 7 * 2.将每轮寻得的最后一个元素放头指针head后面 8 * 3.将头指针head和当前指针current往后一动一次 9 * 4.重复2-3,直到当前指针current无下一个节点 10 * 11 * @version: v1.0 12 * @create: 2021-01-30 10:41 13 **/ 14 15 public class NodeTest { 16 /**单链表形式*/ 17 // public static void main(String[] args) { 18 // Scanner scanner = new Scanner(System.in); 19 // System.out.println("Input the number of nodes"); 20 // int nodesNum = scanner.nextInt(); 21 // Node[] nodes = new Node[nodesNum]; 22 // for(int i=0;i<nodesNum;i++) { 23 // nodes[i] = new Node(); 24 // } 25 // System.out.println("Input the values of nodes"); 26 // for(int i=0;i<nodesNum;i++){ 27 // nodes[i].value = scanner.nextInt(); 28 // if(i != nodesNum - 1){ 29 // nodes[i].right = nodes[i + 1]; 30 // } 31 // System.out.println(nodes[i].toString() + ":" +nodes[i].value); 32 // } 33 // System.out.println("nodes initial ok"); 34 // 35 // Node headFianl = nodes[0]; 36 // Node head = nodes[0]; 37 // Node current = head; 38 // Node currentP = null; 39 // while (current.right != null) { 40 // while (current.right != null) { 41 // currentP = current; 42 // current = current.right; 43 // } 44 // currentP.right = null; 45 // Node tail = current; 46 // tail.right = head.right;//重新赋值 47 // head.right = tail; 48 // 49 // current = current.right; 50 // head = current; 51 // if(current == null){ 52 // break; 53 // } 54 // } 55 // 56 // System.out.println("output"); 57 // for(int i=0;i<nodesNum;i++){ 58 // System.out.println(headFianl.toString() + ":" +headFianl.value); 59 // headFianl = headFianl.right; 60 // } 61 // System.out.println("ok"); 62 // } 63 64 /**双向链表形式*/ 65 public static void main(String[] args) { 66 Scanner scanner = new Scanner(System.in); 67 System.out.println("Input the number of nodes"); 68 int nodesNum = scanner.nextInt(); 69 Node[] nodes = new Node[nodesNum]; 70 for(int i=0;i<nodesNum;i++) { 71 nodes[i] = new Node(); 72 } 73 System.out.println("Input the values of nodes"); 74 for(int i=0;i<nodesNum;i++){ 75 nodes[i].value = scanner.nextInt(); 76 if(i != nodesNum - 1){ 77 nodes[i].right = nodes[i + 1]; 78 nodes[i + 1].left = nodes[i]; 79 } 80 System.out.println(nodes[i].toString() + ":" +nodes[i].value); 81 } 82 System.out.println("nodes initial ok"); 83 84 Node headFianl = nodes[0]; 85 Node head = nodes[0]; 86 Node current = head; 87 while (current.right != null) { 88 while (current.right != null) { 89 current = current.right; 90 } 91 92 current.left.right=null; 93 Node tail = current; 94 tail.right = head.right;//重新赋值 95 if(head.right == null){ 96 tail.right = head; 97 tail.left = head.left; 98 tail.left.right = tail; 99 head.left = tail; 100 break; 101 } 102 head.right.left = tail; 103 tail.left = head; 104 head.right = tail; 105 106 current = current.right; 107 head = current; 108 if(current == null){ 109 break; 110 } 111 } 112 113 System.out.println("output"); 114 for(int i=0;i<nodesNum;i++){ 115 System.out.println(headFianl.toString() + ":" +headFianl.value); 116 headFianl = headFianl.right; 117 } 118 System.out.println("ok"); 119 } 120 121 static class Node{ 122 Node left; 123 Node right; 124 Object value; 125 } 126 }