环形链表与否判断
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
//如果fast没有走到链表结尾的时候(fast =!= null && fast.next != null),就已经在某点处和slow相等了,那么就存在环形链表。如果fast可以走到链表结尾,则一定不存在环形链表。
public class Solution {
public boolean hasCycle(ListNode head) {
ListNode fast = head;
ListNode slow = head;
//这里的判断条件其实是越多越好,就是用来判断该链表是否是一个直的链表。
while(fast != null && fast.next !=null && fast.next.next != null && fast.next.next.next != null){
fast = fast.next.next;
slow = slow.next;
if(fast == slow){
return true;
}
}
return false;
}
}
1.存在环形链表
fast走不到结尾处,且在某一点处slow相等。
2.不存在环形链表
fast可以走到结尾处
条件==while(fast != null && fast.next !=null && fast.next.next != null && fast.next.next.next != null)==就是用来判断fast能否走到结尾处。
//这里的判断条件其实是越多越好,就是用来判断该链表是否是一个直的链表。
leetcode中写条件的时候很怪异,不允许next.next写到next的前面。