
/**
* 当存在环形的条件下,快慢指针形成了一个龟兔赛跑的模型,如果两个指针指向了
* 同一个元素,说明存在环形,返回true
* 解法一:快慢双指针
*
* @param head
* @return
*/
public boolean hasCycle(ListNode head) {
if (head == null) return false;
ListNode slowPtr = head, fastPtr = head;
while (fastPtr.next != null && fastPtr.next.next != null) {
slowPtr = slowPtr.next;
fastPtr = fastPtr.next;
if (slowPtr == fastPtr) {
return true;
}
}
return false;
}
二、给定一个链表,返回链表开始入环的第一个节点,如果链表无环,则返回null
/**
* 当存在环形的条件下,快慢指针形成了一个龟兔赛跑的模型,如果两个指针指向了
* 同一个元素,说明存在环形,跳出第一个while循环,将慢指针重新指向head,
* 快慢指针都变为移动一个元素,当快慢指针再次相遇,说明找到了入环的开始节点
* @param head
* @return
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)