欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据结构环形链表(java实现)

程序员文章站 2022-06-28 16:28:46
解法1:快慢指针/** * 思路: * 快慢指针 * 只要慢指针被追上就说明有循环 */ public static boolean hasCycle(ListNode head) { if (head==null)return false; ListNode fast=head; ListNode slow=head; while (fast.next!=null&&fast.next.next!=nul...

解法1:快慢指针

/**
 * 思路:
 * 快慢指针
 * 只要慢指针被追上就说明有循环
 */
    public static boolean hasCycle(ListNode head) {
        if (head==null)return false;
        ListNode fast=head;
        ListNode slow=head;
        while (fast.next!=null&&fast.next.next!=null) {
            fast = fast.next.next;
            slow = slow.next;
            if (slow==fast)return true;
        }
        return false;
    }

 时间复杂度:On

空间复杂度:O1

数据结构环形链表(java实现)

解法2:hashSet

/**
 * 思路:
 * 暴力法,遍历链表
 * 把链表放入set集合中,一旦有重复就能用方法判断出来
 */
    public static boolean hasCycle(ListNode head) {
        HashSet<ListNode> set = new HashSet<>();
        while (head!=null){
            if (set.contains(head))return true;
            set.add(head);
            head=head.next;
        }
        return false;
    }

 时间复杂度:On

空间复杂度:On

数据结构环形链表(java实现)

本文地址:https://blog.csdn.net/qq_38783664/article/details/110240219