目录
建立两个指针p1 p2都指向头结点 Node p1,p2=head,每当p1向前移动一位,p2向前移动2位 当p1==p2时 证明这个链表存在环 否则返回false
/* 算法思想 判断是否有环 类似于赛跑 设置两个节点 一个 p1 p2 都指向链表头部 p1走一步 p2走两步 p1=p2时 return true */ public class BooleanIsCycle { private static class Node{ int data; Node next; public Node(int data, Node next) { this.data = data; this.next = next; } public Node(int data) { this.data = data; } } /** * 判断是否有环 */ public static boolean isCycle(Node head) { Node p1=head; Node p2=head; while (p2!=null||p2.next!=null) { p1=p1.next; p2=p2.next.next; if (p1==p2){ return true; } } return false; } public static void main(String[] args) throws Exception{ Node node1=new Node(5); Node node2=new Node(3); Node node3=new Node(7); Node node4=new Node(2); Node node5=new Node(6); Node node6=new Node(8); Node node7=new Node(1); Node node8=new Node(2); node1.next=node2; node2.next=node3; node3.next=node4; node4.next=node5; node5.next=node6; node6.next=node7; node7.next=node8; node8.next=node4; System.out.println(isCycle(node1)); } }