题目:有一个单向链表, 链表中有可能出现”环”, 就像下图这样.那么, 如何用程序来判断该链表是否为有环链表呢?

2.思路扩展:
环形跑道追及问题: 男生和女生从同一起点起跑, 直到两人再次相遇
3.解法:
定义两个指针p1, p2, p1每次移动1个单位, p2每次移动2个单位, 并且同时从头节点出发, 如果p1和p2再次相遇, 则证明链表有环, 反之无环.
4.代码:
package com.xiaoxuanfeng.letcode;public class TheRingOfLinkedList {// 1.定义节点private static class Node {int data; // 当前节点的值Node next; // 指向下一节点Node(int data) {this.data = data;}}// 2.判断是否有环public static boolean isCycle(Node head) {// 定义p1,, p2, 让它们从head同时出发Node p1 = head;Node p2 = head;while (p2 != null && p2.next !=null) {p1 = p1.next; // p1移动1个单位p2 = p2.next.next; // p2移动2个单位if (p1 == p2) {return true;}}return false;}// 3.调用主函数进行测试public static void main(String[] args) {// 创建链表Node node1 = new Node(1);Node node2 = new Node(2);Node node3 = new Node(3);Node node4 = new Node(4);// 把节点连走来node1.next = node2;node2.next = node3;node3.next = node4;node4.next = null;// 打印结果System.out.println(isCycle(node1));}}
