【数据结构】单链表—判断一个链表是否形成了环形结构 — 快慢指针

来源:互联网 发布:it外包公司怎么样 编辑:程序博客网 时间:2024/05/16 16:16

题目:判断一个链表是否形成了环形结构?
思路:定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个指针一次走两步,如果走的快的指针追上走的慢的指针,那么链表就是环形链表,如果走的快的指针走到了链表的末尾都没有追上第一个指针,那么这个链表就不是环形链表。

代码如下:

template<class T>struct ListNode{    T _value;    ListNode<T>* _next;    ListNode(const T& value)        :_value(value)        ,_next(NULL)    {}};template<class T>class List{public:    List()        :_head(NULL)    {}    bool PushBack();    bool IsRing()//判断一个链表是否为环形,快慢指针    {        ListNode<T>* fast = _head;        ListNode<T>* slow = _head;        while(fast != NULL)        {            slow = slow->_next;            fast = fast->_next->_next;            if(slow == fast)                return true;        }        return false;    }private:    ListNode<T>* _head;};
0 0
原创粉丝点击