工业和信息化部网站备案管理系统,百度人工服务24小时,网站后台模板psd,怎么做网站的广告#判断一个单链表中是否存在 环。 #设置两个指针(fast, slow)#xff0c;初始值都指向头#xff0c;slow每次前进1步#xff0c;fast每次前进2步#xff0c; 大概的思路如下#xff1a; 如果链表存在环#xff0c;则fast必定先进入环#xff0c;而slow后进入环#xff…#判断一个单链表中是否存在 环。 #设置两个指针(fast, slow)初始值都指向头slow每次前进1步fast每次前进2步 大概的思路如下 如果链表存在环则fast必定先进入环而slow后进入环两个指针必定相遇。 如果链表不存在环则fast必定先指向NULL而slow后指向NULL。
如果存在环则返回1 否则返回0 int IsExitsCircle(list *head)
{assert(NULL ! head);list *slow head, *fast head;while (fast fast-next) {slow slow-next;fast fast-next-next;if ( slow fast ){break; }}return !(fast NULL || fast-next NULL);
}根据上面的思路可以找出环开始出现的地方slow与fast指针相遇后让slow指向head然后
slow与fast同时设置步长为1进行遍历两者同时指向同一个节点时就是环开始出现的地方代码如下list *FindCircleNode(list *head)
{list *slow head, *fast head;//从头开始出发if (NULL head){return NULL;}while (fast fast-next) {slow slow-next;fast fast-next-next;if ( slow fast ){break;}}if ((NULL fast) || (NULL fast-next)){return NULL;}slow head;while (slow ! fast){slow slow-next;fast fast-next;}return slow;
}