算法基础~链表~链表求环解法一,借助set集合

时间:2021-07-20
本文章向大家介绍算法基础~链表~链表求环解法一,借助set集合,主要包括算法基础~链表~链表求环解法一,借助set集合使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

算法基础~链表~链表求环解法一,借助set集合

1,成环的链表的图解:

 2,从图解,我们得知,下个结点指向的结点先前已经遍历过(存在过了)则成环,找到环的起点~ 解释一下why使用到工具set集合?

because 要找到遍历过的结点它身上没有任何标志,是需要从第一个结点开始循环遍历到它身上的【所以选择放到工具set集合,利用工具set封装好的方法find 遍历】

3,✿小小 心得:某个结点(身上没有任何标志),比较时又得从第一个结点开始循环,可以借助前人写好的好工具 set集合【封装了删改方法

所以到这里就知道要使用set集合啦!

● 4,思路:【set 集合的元素就是把遍历过的结点指针(地址)“装”进去,然后每次移动到下个结点,

看它的next指针的指向是否指向已经遍历过的结点(即已经“装”到set中,可以通过遍历set集合中的元素,

调用set的find 方法进行比较得知)】

5,上代码,解析思路看2、3、4

class Solution{
    public:
        ListNode *detectCycle(ListNode *head){
            std::set<ListNode*> node_set;
            while(head){
                if(node_set.find(head) != node_set.end()){
                    return head;
                }
                node_set.insert(head);
                head = head->next;
            }
            return NULL;
        }
}
 

原文地址:https://www.cnblogs.com/shan333/p/15034034.html