当前位置:   article > 正文

单链表算法 - 环形链表II

单链表算法 - 环形链表II

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/linked-list-cycle-ii/description/思路:

代码:

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * struct ListNode *next;
  6. * };
  7. */
  8. typedef struct ListNode ListNode;
  9. ListNode* findMidNode(ListNode* head)
  10. {
  11. //定义两个指针
  12. ListNode* slow = head;
  13. ListNode* fast = head;
  14. while(fast && fast->next)
  15. {
  16. slow = slow->next;
  17. fast = fast->next->next;
  18. if(fast == slow)
  19. return slow;
  20. }
  21. return NULL;
  22. }
  23. struct ListNode *detectCycle(struct ListNode *head) {
  24. //找环的相遇点
  25. ListNode* meet = findMidNode(head);
  26. //从头节点和相遇节点开始遍历,每次走一步
  27. ListNode* pcur = head;
  28. while(meet && pcur)
  29. {
  30. //当指针相遇的节点,即环的入口节点
  31. //相遇点和头节点到入环的位置是相等的
  32. if(meet == pcur)
  33. {
  34. return pcur;
  35. }
  36. meet = meet->next;
  37. pcur = pcur->next;
  38. }
  39. //代码走到这就说明链表不成环
  40. return NULL;
  41. }

 提交结果:

那么为什么相遇点和头节点到入环节点的距离是相等的。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/860395
推荐阅读
相关标签
  

闽ICP备14008679号