题目描述
判断给定的链表中是否有环。如果有环则返回true,否则返回false。
你能给出空间复杂度的解法么?
解答
由于Set集合中的元素是没有重复的,我们可以把节点存放到Set中,每次存放判断当前节点是否存在,如果存在,说明有环。
import java.util.*;
public class Solution {
public boolean hasCycle(ListNode head) {
Set<ListNode> set = new HashSet<>();
while(head != null){
if (set.contains(head))return true;
set.add(head);
head = head.next;
}
return false;
}
}
思路二:删除法
所以如果存在环,则必会出现head = head.next;
public boolean hasCycle(ListNode head) {
//如果head为空,或者他的next指向为空,直接返回false
if (head == null || head.next == null)
return false;
//如果出现head.next = head表示有环
if (head.next == head)
return true;
ListNode nextNode = head.next;
//当前节点的next指向他自己,相当于把它删除了
head.next = head;
//然后递归,查看下一个节点
return hasCycle(nextNode);
}