leetcode第141题环形链表
一点小的总结:
用hashset是我自己唯一能够想到的思路了,但是我在写这个题的时候还出现了一点点小小的偏差,就是set里面的add方法本身返回的就是一个boolean类型的数值,所以就没有必要用contain这个方法了
public class Solution {
public boolean hasCycle(ListNode head) {
//判断是有有环
if (head == null || head.next == null) {
return false;
}
HashSet<ListNode> set = new HashSet<>();
while (head != null) {
if (!set.add(head)) {
return true;
}
head = head.next;
}
return false;
}
}
第二种方式是官方解法:
快慢指针进行判断,
**思考:*为什么不能都定义fast也是head呢? 因为这里打入循环的条件是slow != fast 如果第一步等于了,循环就进不去了,我记得小灰的算法漫画还教过我怎么判断环的那个起始点,慢慢来吧!之后还可以再做一个总结
public class Solution {
public boolean hasCycle(ListNode head) {
//用快慢指针呢进行一个计算
if (head == null || head.next == null) {
return false;
}
ListNode slow = head;
ListNode fast = head.next;
while (!slow.equals(fast)) {
if (fast == null || fast.next == null) {
return false;
}
slow = slow.next;
fast = fast.next.next;
}
return true;
}
}