利用Set集合不存放重复元素的性质,我们遍历一次链表,每遍历一个节点就把他加入到Set集合中:
使用两个指针遍历链表,快指针每次前进两步,慢指针每次前进一步:
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
Set<ListNode> set = new HashSet<ListNode>();
while(head!=null) {
if(!set.add(head)){
return true;
}
head = head.next;
}
return false;
}
}
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
if(head == null || head.next == null){
return false;
}
ListNode slower = head; //慢指针
ListNode faster = head.next; // 快指针
while(faster!=null && faster.next!=null){ //遍历结束
if(slower == faster){ //快慢指针相遇,存在环
return true;
}
slower = slower.next; //慢指针前进一步
faster = faster.next.next; //快指针前进两步
}
return false;
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43598687/article/details/123186595
内容来源于网络,如有侵权,请联系作者删除!