题目:有一个单向链表,链表中有可能出现“环”,如下图所示:那么如何用程序来判断该链表是否为有环链表呢?
解题思路:
- 首先创建两个对象引用p1和p2,让他们同时指向这个链表的头结点,然后开始遍历链表,让指针p1每次向后移动1个节点,指针p2每次向后移动2个节点,然后比较两个指针指向的节点是否相同,如果相同,则链表有环;否则继续遍历。
- 这个解决思路的思想是,对于环形,速度快的总会在多跑一圈的情况下追上速度慢的。
主要代码实现:
//链表节点
private static class Node{
int data;
Node next;
Node(int data){
this.data=data;
}
}
/**
* 判断链表是否有环
* @param head 链表头结点
* @return 返回结果,tr