【C语言】找带环单链表的环入口

来源:互联网 发布:有困难网络求助平台 编辑:程序博客网 时间:2024/06/06 03:40

思想:(1)快慢指针,先让快指针追上慢指针
            (2)令快指针指向表头,慢指针的指向不变,两个指针同时开始走
            (3)两个指针相遇时,所指节点即为环的入口

Node*FindEntry(Plinklist*pplist)
{
          assert(pplist);
          Node*fast = *pplist;
          Node*slow = *pplist;
          while(fast&&fast->next )  //让快指针追上慢指针
          {
                   fast = fast->next->next;
                   slow = slow->next;
                   if(fast == slow)
                   {
                             break;
                   }
          }
          fast = *pplist;
          while(fast != slow)
          {
                   fast = fast->next;
                   slow = slow->next;
          }
          returnfast;
}

0 1