加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 05:57:48 所属栏目:安全 来源:网络整理
导读:题目:判断一个链表是否形成了环形结构? 思路:定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个指针一次走两步,如果走的快的指针追上走的慢的指针,那么链表就是环形链表,如果走的快的指针走到了链表的末尾都没有追上第一个指针,那么

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

代码如下:

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;
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读