LintCode(炼码) / LeetCode 参考答案免费查询
描述中文
给定一个链表,判断它是否有环。
在线评测地址
LintCode 炼码样例
样例 1:
输入:
linked list = 21->10->4->5,then tail connects to node index 1(value 10).
输出:
true
解释:
链表有环。
样例 2:
输入:
linked list = 21->10->4->5->null
输出:
false
解释:
链表无环。
挑战
不要使用额外的空间
题解答案
Given a linked list, determine if it has a cycle in it.
Follow up: Can you solve it without using extra space?
快慢指针的经典题。 快指针每次走两步,慢指针一次走一步。 在慢指针进入环之后,快慢指针之间的距离每次缩小1,所以最终能相遇。
public class Solution {
public Boolean hasCycle(ListNode head) {
if (head == null || head.next == null) {
return false;
}
ListNode fast, slow;
fast = head.next;
slow = head;
while (fast != slow) {
if(fast==null || fast.next==null)
return false;
fast = fast.next.next;
slow = slow.next;
}
return true;
}
}
更多题解参考:
九章算法 - 帮助更多程序员找到好工作,硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧