题解 | #判断链表中是否有环#
判断链表中是否有环
http://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9
此文仅用于本人记录
在lc上做过,当时比较蠢只想到了哈希表或者数组存指针(哈希表类型<ListNode,Interger>),这样每遍历到一个节点就使用哈希表.get(node)和数组.containsKey(node)来判断是否存在过这个节点。
然后看了题解,哇,快慢指针法真牛逼:快指针本来走的就比慢指针快,还在慢指针前面,只有有环才能让他们相遇,这样空间复杂度是O(1),时间复杂度也仅是O(n)了!
/**
* 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) {
if(head != null){
ListNode slowPointer = head;
ListNode quickPointer = slowPointer.next;
while(quickPointer != null && quickPointer.next != null){
quickPointer = quickPointer.next.next;
slowPointer = slowPointer.next;
if(quickPointer == slowPointer){
return true;
}
}
return false;
}
else{
return false;
}
}
}
