题目:
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
思路:
1)将遍历过的结点都指向头结点,遍历一个结点之前判断该结点的next的next的结点是否是头结点,如果是头结点的话,则存在环
2)设置两个指针,步数不同 如果存在环 则两个指针有指向同一结点的时候
思路1)代码
public boolean hasCycle(ListNode head) {
if(head == null){
return false;
}
ListNode phead = head;
ListNode p = head.next;
if(p == null){
return false;
}
while(p.next!=null){
if(phead.next.next == head){
return true;
}
phead = p.next;
p.next = head;
p = phead;
}
return false;
}
思路2代码
public boolean hasCycle(ListNode head) {
if(head == null){
return false;
}
ListNode phead = head;
ListNode p = head;
while(p.next!=null && p.next.next!=null){
phead = phead.next;
p = p.next.next;
if(phead == p){
return true;
}
}
return false;
}