Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.27 KB | None | 0 0
  1. public class ReverseLinkedList {
  2.  
  3. static class Node {
  4. int id;
  5. Node next;
  6.  
  7. public Node(int id) {
  8. this.id = id;
  9. }
  10. }
  11.  
  12. public static void main(String[] args) {
  13. print(reverse(buildCycleList()));
  14. print(reverse(buildNonCycleList()));
  15. }
  16.  
  17. private static Node reverse(Node head) {
  18. Node circle = findCircle(head);
  19. Node current = head;
  20. Node previous = null;
  21. boolean visited = false;
  22. do {
  23. if (current == null)
  24. break;
  25. if (current == circle) {
  26. if (visited)
  27. break;
  28. visited = true;
  29. }
  30. var tmp = current.next;
  31. current.next = previous;
  32. previous = current;
  33. current = tmp;
  34. } while (true);
  35. return previous;
  36. }
  37.  
  38. private static Node findCircle(Node head) {
  39. Node tortoise = head;
  40. Node hare = head;
  41. do {
  42. tortoise = move(tortoise);
  43. hare = move(move(hare));
  44. if (tortoise == null || hare == null) // no cycle
  45. return null;
  46. } while (tortoise != hare);
  47.  
  48. tortoise = head;
  49. while (tortoise != hare) {
  50. tortoise = move(tortoise);
  51. hare = move(hare);
  52. }
  53.  
  54. return tortoise;
  55. }
  56.  
  57. private static Node move(Node node) {
  58. return node != null ? node.next : null;
  59. }
  60.  
  61. private static void print(Node reversed) {
  62. Node current = reversed;
  63. while (current != null) {
  64. System.out.print(current.id + " -> ");
  65. current = current.next;
  66. }
  67. System.out.println("NULL");
  68. }
  69.  
  70. private static Node buildCycleList() {
  71. Node head = new Node(1);
  72. Node circle = new Node(2);
  73. head.next = circle;
  74. circle.next = new Node(3);
  75. circle.next.next = new Node(4);
  76. circle.next.next.next = new Node(5);
  77. circle.next.next.next.next = circle;
  78. return head;
  79. }
  80.  
  81. private static Node buildNonCycleList() {
  82. Node head = new Node(1);
  83. head.next = new Node(2);
  84. head.next.next = new Node(3);
  85. head.next.next.next = new Node(4);
  86. head.next.next.next.next = new Node(5);
  87. return head;
  88. }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement