1.定义Node属性
package com.example.demo;public class Node1 {// 这仅仅是一个标识,用来标记这是哪一个节点public int tag;public Node1 next;public Node1(Node1 next, int tag) {this.next = next;this.tag = tag;}
}
2.构建有环链表
0public static Node1 createTestNode() {Node1 node13 = new Node1(null, 13);Node1 node12 = new Node1(node13, 12);Node1 node11 = new Node1(node12, 11);Node1 node10 = new Node1(node11, 10);Node1 node9 = new Node1(node10, 9);Node1 node8 = new Node1(node9, 8);Node1 node7 = new Node1(node8, 7);Node1 node6 = new Node1(node7, 6);Node1 node5 = new Node1(node6, 5);Node1 node4 = new Node1(node5, 4);Node1 node3 = new Node1(node4, 3);Node1 node2 = new Node1(node3, 2);// 设置环入口node13.next = node5;Node1 head = new Node1(node2, 1);return head;}
3.判断是否是有环链表,并找出对应的入口
package com.example.demo;public class LinkedIsRing {//快慢指针判断链表是否有环,并找出环的起始节点public static Node1 isCircleBySlowFast(Node1 node) {Node1 slow = node;Node1 fast = node;Node1 p = node;while (slow != null && fast.next !=null) {slow = slow.next;fast = fast.next.next;if(slow == fast) {Node1 q = fast;while (p != q) {p = p.next;q = q.next;}return p;}}return null;}
}