zoukankan      html  css  js  c++  java
  • [LeetCode OJ] Linked List Cycle II—Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode *detectCycle(ListNode *head) {
    12         ListNode *p1, *p2; //p1和p2从链表的第一个节点出发,p1每次移动一个节点,p2每次移动两个节点,若两个指针重逢,则说明有环存在,否则若p2遇到NULL指针,说明无环存在
    13         p1 = p2 = head;
    14 
    15         if(p2==NULL || p2->next==NULL)
    16            return NULL;
    17         p1 = p1->next;
    18         p2 = p2->next->next;
    19         
    20         while(p1!=p2)
    21         {
    22             if(p2==NULL || p2->next==NULL)
    23                 return NULL;
    24             p1 = p1->next;
    25             p2 = p2->next->next;
    26         
    27         }
    28         //此时p1==p2,说明有环存在。利用定理:p1和p2相遇处距离链表的第一个节点的长度是环长度的整数倍,来求环起始点。让一个指针从head处开始出发,另一个指针从相遇处出发,这两个指针必然在环起始节点处相遇
    29         ListNode * CircleBegin_Node;
    30         p1 = head;
    31         while(p1!=p2)
    32         {
    33             p1 = p1->next;
    34             p2 = p2->next;
    35         }
    36         CircleBegin_Node = p1;
    37         return CircleBegin_Node;
    38     }
    39 };
  • 相关阅读:
    py爬取英文文档学习单词
    windows 下使clion支持c++11操作记录
    angular在ie8下的一个bug
    连连看小游戏前端实现
    如何禁止页面文字被选中
    分享一个BUG
    描点链接元素的优化提升用户体验
    模拟淘宝滚动显示问题解决入口
    简易图片轮播效果
    支付战争
  • 原文地址:https://www.cnblogs.com/Marrybe/p/3777939.html
Copyright © 2011-2022 走看看