141.Linked List Cycle
Posted 二十年后20
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了141.Linked List Cycle相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode.com/problems/linked-list-cycle/description/
题目大意:给出一个链表,判断该链表是否有环,空间复杂度最好控制在o(1)
这个题没有给测试用例,导致没太明白题目意思,看了题解,用了两种方法示例如下:
法一(借鉴):利用两个指针,一个指针步长为2,一个指针步长为1,若链表中有环,则两个指针同时走,在某一时刻一定会走到一起;若链表中没有环,则两个指针一定会走到null,代码如下(耗时1ms):
1 public boolean hasCycle(ListNode head) { 2 ListNode fast = head; 3 ListNode slow = head; 4 while(fast != null && slow != null && fast.next != null) { 5 slow = slow.next; 6 fast = fast.next.next; 7 if(slow == fast) { 8 return true; 9 } 10 } 11 return false;
法二(借鉴):利用set集合中的contains,判断是否有两个相同的结点在集合中,如果有,则有环,代码如下(耗时10ms):
1 Set<ListNode> list = new HashSet<>(); 2 while(head != null) { 3 if(list.contains(head)) { 4 return true; 5 } 6 else { 7 list.add(head); 8 head = head.next; 9 } 10 } 11 return false;
以上是关于141.Linked List Cycle的主要内容,如果未能解决你的问题,请参考以下文章
算法分析如何理解快慢指针?判断linked list中是否有环找到环的起始节点位置。以Leetcode 141. Linked List Cycle, 142. Linked List Cycl(代码