问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3901 访问。
给定一个链表,判断链表中是否有环。
进阶:
你能否不使用额外空间解决此题?
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
示例
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3901 访问。
public class Program {
public static void Main(string[] args) {
var head = new ListNode(1) {
next = new ListNode(2) {
next = new ListNode(1) {
next = new ListNode(2) {
next = new ListNode(3)
}
}
}
};
var res = HasCycle(head);
Console.WriteLine(res);
Console.ReadKey();
}
private static bool HasCycle(ListNode head) {
var pointer = head;
while(pointer != null && pointer.next != null) {
head = head.next;
pointer = pointer.next.next;
if(pointer == head) return true;
}
return false;
}
public class ListNode {
public int val;
public ListNode next;
public ListNode(int x) { val = x; }
}
}
以上给出1种算法实现,以下是这个案例的输出结果:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3901 访问。
False
分析:
显而易见,以上算法的时间复杂度为: 。