美文网首页
链表—环形链表

链表—环形链表

作者: 尼小摩 | 来源:发表于2018-07-04 10:22 被阅读8次

    给定一个链表,判断链表中是否有环。

    分析

    由于每一个父亲只有可能有一个孩子,故这里的环实际上是指list中某一个节点的孩子同时也是它自己或者他的祖先。 这个问题需要注意几种情况:

    1. 空链表不成环
    2. 一个节点自环
    3. 一条链表完整成环

    不能开额外的空间,即空间复杂度是o(1)。该问题是经典面试问题,其标准解法是用两个指针,一快一慢,如果在快的指针能够追上慢的指针,则有环,否则无环。

    代码如下:

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

    相关文章

      网友评论

          本文标题:链表—环形链表

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