关闭

Linked List Cycle II

标签: Linked List Cycle IILinked ListsTwo pointersLeetCode
157人阅读 评论(0) 收藏 举报
分类:
<pre name="code" class="cpp">/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
         ListNode* h1 = head, *h2 = head;
         //h1走一步,h2走两步,两个值必定会相遇
         while(NULL != h1 && NULL != h2)
         {
             h1 = h1->next;
             h2 = h2->next;
             if(h2 == NULL)
                return NULL;
            h2 = h2->next;
            
            if(h1 == h2)//如果相遇,则表示有环。
            {
                h1 = head;
                
                while(h1 != NULL && h2 != NULL)//一个从头走,一个从之前相遇的位置走,则必定会在第一个相交点遇见。
                {    
                    if(h1 == h2)//说明head就是第一个相遇点
                    {
                        return h1;
                    }
                    h1 = h1->next;
                    h2 = h2->next;
                }
                
                break;
            }
         }
         return NULL;
    }
};



   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38263次
    • 积分:1835
    • 等级:
    • 排名:千里之外
    • 原创:151篇
    • 转载:0篇
    • 译文:0篇
    • 评论:17条
    文章分类
    最新评论