给定一个链表,确定它是否有一个循环

时间:2015-04-13 01:57:56

标签: java algorithm linked-list

我正在查看programcreek.com中关于在链表中查找周期的以下代码,并想知道变量' head'通过将它作为参数传递给布尔方法来声明ListNode类型。 Java中是否存在数据类型ListNode。我似乎无法在文档中找到它。 其次,我们如何分析时间和空间的复杂性。

public class Solution {
    public boolean hasCycle(ListNode head) {
        ListNode fast = head;
        ListNode slow = head;

        if(head == null)
            return false;

        if(head.next == null)
            return false;

        while(fast != null && fast.next != null){
            slow = slow.next;
            fast = fast.next.next;

            if(slow == fast)
                return true;
        }

        return false;
    }
}

2 个答案:

答案 0 :(得分:0)

在此函数中, boolean 是函数hasCycle()的返回类型。此函数的输入是Class ListNode的对象,如果存在,您需要找到它的循环。这个功能很好。我不认为Java有一个名为ListNode的类。您可以找到时间复杂度here

答案 1 :(得分:0)

ListNode类没有在java中定义,必须单独定义。这是一个如何定义它的例子

public class linkedlistcycle {

    class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
            next = null;
        }
    }

    public boolean hasCycle(ListNode head){
        ListNode a = head ;
        ListNode b = head ;


        if ((head == null) || (head.next==null))
        {   return false;}

        while ((head != null) | (head.next != null))
        {

            a = a.next ;
            b = b.next.next;
                    if(a == b)
                        return true;
        } 

    return false ;

        }



    }