环的入口结点检测

来源:互联网 发布:录制屏幕的软件 编辑:程序博客网 时间:2024/06/04 19:13

在上述“单链表环的检测”文章中提了两种不同写法的快慢指针(思想是一样的),只是快慢指针初始位置有所不同,进而造成快慢指针相遇结点不同。这有什么影响呢?

这回直接影响对“环入口结点检测”,因为环的入口检测与快慢指针相遇结点息息相关。 只有当快慢指针同时出发时,相遇结点对环的入口结点检测有帮助。

一个指向头结点的指针与慢指针(指向相遇结点)同时出发,第一次相遇的结点为环的入口结点。详细的推导请见诚实的偷包贼的博客:http://blog.csdn.net/fanfank/article/details/9140849。

本文使用在上文中创建的带环的单链表:


//环的入口检测pNode CircleStart(pNode head){  pNode fast,slow,temp;  fast=slow=temp=head;  if(NULL==head->next)  {    printf("只有一个头结点!");return NULL;  }  else if(NULL==head->next->next)  {   printf("只有2个结点!");   return NULL;  }  else  {while((NULL!=fast)&&(NULL!=fast->next)){  slow=slow->next;   fast=fast->next->next;  if(fast==slow)  {break;  }}  }    //一个指向头结点的指针与慢指针(指向相遇结点)同时出发,相遇的结点为环的入口结点  while(1)  { temp=temp->next; slow=slow->next;  if(slow==temp) {  return slow; }    }}


运行结果为:


0 0
原创粉丝点击