美文网首页
leetcode141.环形链表

leetcode141.环形链表

作者: 憨憨二师兄 | 来源:发表于2020-04-13 17:02 被阅读0次

    题目链接

    解法一:哈希表

    代码如下:

    /**
     * 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<>();
            while(head != null){
                if(set.contains(head)){
                    return true;
                }else{
                    set.add(head);
                }
                head = head.next;
            }
            return false;
        }
    }
    

    代码运行结果:



    因为需要依次遍历数组,而且使用了额外的数据结构HashSet,所以时间复杂度为O(n),额外空间复杂度为O(n)。

    解法二:快慢指针

    代码如下:

    /**
     * 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 || head.next.next == null){
                return false;
            }
            head = head.next;
            ListNode fast = head.next.next;
            while(fast != head){
                if(fast.next == null || fast.next.next == null){
                    return false;
                }
                head = head.next;
                fast = fast.next.next;
            }
            return true;
        }
    }
    

    执行结果:


    本题最优解为使用快慢指针的思想,时间复杂度为O(n),额外空间复杂度为O(1)。在我的文章 链表相关基础题及答案解析中,有关于这道题的详细说明,大家加油。

    相关文章

      网友评论

          本文标题:leetcode141.环形链表

          本文链接:https://www.haomeiwen.com/subject/bcrnmhtx.html