链表 是否带环,环的长度以及入口点

来源:互联网 发布:sdn会取代那些传统网络 编辑:程序博客网 时间:2024/06/05 15:05
//求环的入口点ListNode* MeetNode(ListNode* pHead){if (pHead == NULL || pHead->_next == NULL){return NULL;}ListNode* fast = pHead;ListNode* slow = pHead;while (fast->_next->_next != NULL){fast = fast->_next->_next;slow = slow->_next;if (fast == slow)          //相遇时,即有环{break;}}if (fast->_next->_next == NULL){return NULL;}slow = pHead;while (fast != slow){fast = fast->_next;slow = slow->_next;}return slow;}//判断链表是否带环bool IsCircle(ListNode* pHead){if (pHead == NULL || pHead->_next == NULL){return false;}//快慢指针法定义一个快指针 一个慢指针,快指针每次走两步,慢 指针每次走一步,如相遇 则必定 带环ListNode* fast = pHead;ListNode* slow = pHead;while (fast->_next->_next != NULL){fast = fast->_next->_next;slow = slow->_next;if (fast == slow)break;}if (fast->_next->_next == NULL)return false;elsereturn true;}//求环的长度size_t GetCircleLen(ListNode* pHead){ListNode* slow = MeetNode(pHead);     //MeetNode函数中已经判断各种退出的情况,所以在此不再做判断size_t count = 1;ListNode* p = slow->_next;while (p != slow){p = p->_next;++count;}return count;}

阅读全文
0 0
原创粉丝点击