package 剑指offer;
import java.util.HashSet;
import java.util.Hashtable;
public class t124检查链表是否有环 {
//解法一:利用哈希集合 ,遍历节点,先判断在不在哈希表内,否则就进入哈希表
public boolean hascycle(ListNode head){
ListNode cur =head;
//新建一个hashtable
HashSet<ListNode> hashSet=new HashSet<ListNode>();
while (cur!=null){
if(hashSet.contains(cur)){
return true;
}else {
hashSet.add(cur);
cur=cur.next;
}
}
return false;
}
//快慢指针 一个走两步 一个走一步 如果两个指针能撞一起,那么就是环形链表
public boolean hasCycle_1(ListNode head) {
if(head == null) {
return false;
}
ListNode fast = head;
ListNode low = head;
while(fast.next != null && fast.next.next != null && low.next != null) {
fast = fast.next.next;
low = low.next;
if(fast == low) {
return true;
}
}
return false;
}
}
引申思考:hashTable 与Hashset 与Hashmap 三者区别