什么是环形链表
环形链表:一般来说就是链表的最后一个结点指向链表中的某个结点形成一个闭环,那么这个就是环形链表。
LeetCode环形链表题目
解题思路:
1.可以使用哈希表或者Set集合来解题
2.可以使用双指针的解题思想,这里主要介绍第二种解题方法
双指针解法:
通常情况下,判断一个链表是否有环的步骤为:
1、首先,让快慢指针fast、slow指向链表的头节点Head;
2、让快指针fast一次向后移动两个节点,慢指针一次向后移动一个节点;
3、判断fast和slow是否移动到同一个节点上,如果移动到同一个节点上,就返回true;如果还没有移动到同一个节点上,进行步骤二。
4、上几个步骤通过循环完成,循环的结束条件是fast或者fast->next指向NULL。
public class Solution {
public boolean hasCycle(ListNode head) {
//判空
if (head == null || head.next == null) {
return false;
}
//定义双指针
ListNode slow=head;
ListNode fast=head;
while(fast!=null && fast.next!=null)
{
slow=slow.next;
fast=fast.next.next;
if(slow==fast)
return true;
}
return false;
}
}
在双指针解法中,为什么快指针每步前进两个结点,可参照博客:添加链接描述