下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
#include <iostream> using namespace std; template<typename _Ty> class Node { public: Node(_Ty _X=_Ty()):_Data(_X),_Next(NULL){} int _Data; Node<_Ty> *_Next; }; template<typename _Ty> class List { public: List() { _First = new Node<_Ty>(); } void Insert(int _X) { Node<_Ty> *_S = new Node<_Ty>(_X); _S->_Next = _First->_Next; _First->_Next = _S; } Node<_Ty>* IsCircle()//判断是否是环,并且返回第一次相遇节点地址 { Node<_Ty> *_P= _First; Node<_Ty> *_Q= _First; while(_P!=NULL && _P->_Next!=NULL) { _P=_P->_Next->_Next; _Q=_Q->_Next; if(_P==_Q) return _P; } return NULL; } void SetCircle(int _X)//设置环的位置。 { Node<_Ty>* _P = _First; Node<_Ty>*_Q = _First; while(_Q->_Next!=NULL) { _Q=_Q->_Next; } for(int _I=0;_I<_X;_I++) { _P=_P->_Next; } _Q->_Next=_P; } int GetCircleLength()//找环的大小 { Node<_Ty> *_P = _First; Node<_Ty> *_Q = _First; int _A=0; while(1) { _P=_P->_Next->_Next; _Q=_Q->_Next; _A++; if(_P==_Q) break; } return 2*_A-_A; } int GetCircle()//得到环点到开始节点的节点个数.。 { Node<_Ty> *_P = IsCircle(); Node<_Ty> *_Q = _First; int _A=0; while(_P!=_Q) { _P=_P->_Next; _Q=_Q->_Next; _A++; } return _A; } /* void Show() { Node<_Ty> *_P = _First; while(_P->_Next!=NULL) { cout<<_P->_Next->_Data<<" "; _P=_P->_Next; } cout<<endl; }*/ private: Node<_Ty> *_First; }; int main() { List<int> list; for(int i=0;i<20;i++) { list.Insert(i); } list.SetCircle(10);//设置环的位置 if(list.IsCircle()) { cout<<"有环!"<<endl; } else { cout<<"无环"<<endl; } cout<<"环的位置是:"<<list.GetCircle()<<endl; cout<<"环的长度是:"<<list.GetCircleLength()<<endl; return 0; }
3.环的长度就是第一次快慢指针相遇时慢指针所走过的节点数,因为快指针速度是慢指针的2倍,快指针路程-慢指针路程=环大小。
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。