• BM7 链表中环的入口结点


     

     审题:

            如果给出的第二个链表不为空,则一定有环

            我们先把两种特殊情况搞定:

            {1}、{}                //无环,直接返回null

            {}、{2}               //有环,返回第二个链表任意节点

    ok...好吧

    我们看题目给的函数输入,只有一个参数,那么pHead是将两个链表已经链接好了。

    好吧,是我想多了,看来这就是一个简单的找入环节点的问题。。。。

    嘻嘻,见谅,见谅。。。。

    至于为毛我要用这么通俗的话讲解,还不因为算法这个本来就比较抽象难懂,这样子表达会更容易理解和感同身受。。。呜呜,真是良苦用心,创作不易,点个关注吧,,,嘻嘻


    如何判断有没有环:

            通过快慢指针就ok

            快指针,每次走两步,慢指针一次走一步(其实我感觉快指针只要比慢指针快就ok)

        1.假设没有环,那么是不是可以理解为两个指针从同一个起点出发,沿着一条有尽头的路向前进军

     

    2.假设有环,那么怎么理解呢?

       假设有一天你偷偷出去上网,你老爸知道了,去网吧抓你。然后你跑到学校操场,停下来,你就对你爸说:“笨老头,抓不到我吧”。。。。

        你和你爸同时在同一个起点出发(都是从你网吧的座位出发),你爸的速度是你的两倍,然后当你跑到操场,你沿着操场跑。你爸追你。是不是只要你爸速度比你快,就一定能够抓到你。怎么说呢,不晓得好理解波(如果有问题,可以私信)

     

     

     如何找到入口节点:

            根据XXX数学家,原谅我的无知,我只是知道这么个理论。。。。

            fast和last相遇的点到入环节点 与 起点到入环节点距离相同

            


    思路分析完了,上代码

    别跟我说不会写代码,慢慢调呗。。。。可以借鉴,不可以照抄

    1. /*
    2. struct ListNode {
    3. int val;
    4. struct ListNode *next;
    5. ListNode(int x) :
    6. val(x), next(NULL) {
    7. }
    8. };
    9. */
    10. class Solution {
    11. public:
    12. ListNode* EntryNodeOfLoop(ListNode* pHead) {
    13. ListNode *fast = nullptr;
    14. ListNode *last = nullptr;
    15. ListNode *p = nullptr;
    16. if(pHead->next == nullptr || pHead->next->next == nullptr)
    17. {
    18. return p;
    19. }
    20. fast = pHead->next->next;
    21. last = pHead->next;
    22. while(1)
    23. {
    24. if(fast == nullptr || fast == last)
    25. {
    26. break;
    27. }
    28. if(fast->next != nullptr)
    29. {
    30. fast = fast->next->next;
    31. }
    32. else
    33. {
    34. fast = nullptr;
    35. }
    36. last = last->next;
    37. }
    38. if(fast == last)
    39. {
    40. p = pHead;
    41. while(1)
    42. {
    43. if(p == last)
    44. {
    45. break;
    46. }
    47. p = p->next;
    48. last = last->next;
    49. }
    50. }
    51. return p;
    52. }
    53. };

     日常吐槽:

            写题目三分钟,写博客题解十年功

  • 相关阅读:
    文件服务之FTP
    【高端精品】最新手机版微信小程序(拼多多+京东)全自动操作项目
    Leetcode 118 杨辉三角
    第02篇:手写JavaRPC框架之设计思路
    工程伦理--13.4 临平净水厂化解“邻避效应”的对策
    接口测试如何高效管理接口文档 !
    有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序
    【数据结构入门_数组】 Leetcode 121. 买卖股票的最佳时机
    掌握接口自动化测试,看这篇文章就够了,真滴简单
    电脑常见的故障和解决办法
  • 原文地址:https://blog.csdn.net/weixin_46120107/article/details/126204297