前言:
这道算法题主要是考察对链表得理解,经常出现在面试题当中,今天遇到了,就此记录一下。
题目
有一个单链表,如何判断他是否有环。
解题思路
用双指针进行判断,一个slow指针,一个fast指针从头开始扫描链表。指针slow每次走一步,fast指针每次走两步,如果fast指针遇到NULL时退出,则不存在环。如果slow、fast指针最终相遇,则存在环。
代码实现
public class ListNode {
int val;
ListNode next = null;
ListNode(int val)
{
this.val = val;
}
}
public class Cycle {
boolean IsListNodeHaveCycle(ListNode head){
//如果链表为空,怎没有环
if(head == null)
{
return false;
}
//定义快慢指针
ListNode slow = head;
ListNode fast = head;
while(fast.next!=null||fast!=null)
{
slow = slow.next;
fast = fast.next.next;
if(slow == fast)
{
break;
}
}
return !(fast.next==null||fast==null);
}
}