• 算法基础~链表~链表求环解法一,借助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;
            }
    }
     
  • 相关阅读:
    UVa 725 Division --- 简单枚举
    最短路之Floyd算法
    最短路之Bellman-Ford算法
    快速排序算法
    Dijkstra算法 --- 单源最短路
    HDU 2553 N皇后问题 --- 经典回溯
    HDU 2072 单词数
    HDU 1241 Oil Deposits --- 入门DFS
    jq val() 和 html() 用法注意
    jq 登录正则验证
  • 原文地址:https://www.cnblogs.com/shan333/p/15034034.html
Copyright © 2020-2023  润新知