题目描述:Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
解题思路:由于不使用额外的空间,所以可以在扫描节点之后,让节点后继指针指向头节点,如果以后扫描的后继节点与头节点相同,有环。
Java实现:
/**
* 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<ListNode>();
ListNode p=head;
while(p!=null){
if(set.contains(p)) return true;
else set.add(p);
p=p.next;
}
return false;*/
if(head==null) return false;
ListNode p=head,q=head;
while(p.next!=null){
if(p.next==head) return true;
q=p;
p=p.next;
q.next=head;
}
return false;
}
}
原题题目:
https://leetcode.com/problems/linked-list-cycle/