141_环形链表

简介: 141_环形链表

141_环形链表

 

package 链表;
import java.util.HashSet;
import java.util.Set;
/**
 * https://leetcode-cn.com/problems/linked-list-cycle/
 * 
 * @author Huangyujun 方法二:快慢指针法 生活常识:操场跑圈,跑得快的最终会追上跑得慢的
 */
public class _141_环形链表 {
    /**
     * 方法一: 使用 HashSet 实现不重复的添加 【Set 集合特点:不重复】
     * @param head
     * @return
     */
    public boolean hasCycle1(ListNode head) {
        Set<ListNode> seen = new HashSet<ListNode>();
        while (head != null) {
            if (!seen.add(head)) { // HashSet 底层是HashMap(添加元素时会判断是否已经存在,已经存在会添加不成功)
                return true;
            }
            head = head.next;
        }
        return false;
    }
    public boolean hasCycle(ListNode head) {
        if (head == null || head.next == null)
            return false;
        ListNode slow = head;
        ListNode fast = head.next;
        while (fast != null && fast.next != null) {
//            if(slow == fast)    return true;        //调整到后面,因为刚进来肯定是不会相等的
            slow = slow.next;
            // 等式 右边
            // 为什么 fast.next 不能为空,例如其为空的话 fast.next.next 就变成 null.next 报错!
            // 为什么 fast 不能为空,看等式左边 fast = null 的情况
            fast = fast.next.next;
            if (slow == fast)
                return true;
        }
        return false;
    }
}



目录
相关文章
|
存储 C语言 索引
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
环形数组链表(java)
环形数组链表(java)
【数据结构】环形、相交、回文、分割、合并、反转链表
【数据结构】环形、相交、回文、分割、合并、反转链表
118 0
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
151 2
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
207 1
|
存储 算法 索引
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
116 1
|
Java 索引
力扣经典150题第五十六题:环形链表
力扣经典150题第五十六题:环形链表
125 0
单向环形链表-约瑟夫问题(java)
单向环形链表-约瑟夫问题(java)