摘要:
问题1:如何判断单链表中是否存在环(即上图中从结点E到结点R组成的环)?解答:设一快一慢两个指针(实际上是两个迭代器,Node*fast,*low)同时从链表起点开始遍历,其中快指针每次移动长度为2,慢指针则为1。则若无环,开始遍历之后fast不可能与low重合,且fast或fast->next最终必然到达NULL;若有环,则fast必然不迟于low先进入环,且由于fast移动步长为2,low移动步长为1,则在low进入环后继续绕环遍历一周之前,fast必然能与low重合(至于原因,会在后面再作单独分析)。于是函数可写如下: // 若有环,encounter是fast与low重合的地方 阅读全文