码迷,mamicode.com
首页 > 其他好文 > 详细

链表中的环

时间:2016-10-26 19:48:05      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:circle   list   next   快慢指针   style   ast   链表是否有环   ret   检查   

判断链表是否有环,定义指针一快(走2部)一慢(走1部),相遇即有环。

bool isCircle(listNode* head){
        if(NULL == head)
           return false;
        listNode* slowNode = head->next;
        if(NULL == slowNode)
           return false;
        listNode* fastNode = head->next;
        while(fast != NULL && slow != NULL){
                 if(fast == slow)
                    return true;
                 
                 slowNode = slowNode->next;
                 fastNode = fastNode->next;
                 if(fastNode != NULL)                   //快指针时刻检查,是否为空
                    fastNode = fastNode->next;
        }
        return false;  
}

两个指针,一快一慢,有环,则相遇必在环内,找出相遇节点

listNode* meetingNode(listNode* head){
        if(NULL == head)
           return NULL;
        listNode* slowNode = head->next;
        if(NULL == slowNode)
           return NULL;
        listNode* fastNode = head->next;
        while(fast != NULL && slow != NULL){
                 if(fast == slow)
                    return fast;
                 
                 slowNode = slowNode->next;
                 fastNode = fastNode->next;
                 if(fastNode != NULL)                   //快指针时刻检查,是否为空
                    fastNode = fastNode->next;
        }
        return NULL;  
}

接下来,就可以统计环中节点个数,找出环的入口节点

设节点个数为n,快指针先走n步,然后快慢指针一起一步一步走,相遇节点即环入口节点。

 

链表中的环

标签:circle   list   next   快慢指针   style   ast   链表是否有环   ret   检查   

原文地址:http://www.cnblogs.com/Lunais/p/6001237.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!