Leetcode典型题解答和分析、归纳和汇总——T142(环链表II)

问题描述:

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

说明:不允许修改给定的链表。

问题分析:

本题在前一题的基础上,增加了关于位置的定义,除了采用双指针可以找到环之外,还需要使用快慢双指针确定环起点。

/**
 * 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 *fast = head, *slow = head;

       //第一次快慢指针相遇
       while(fast!=nullptr&&fast->next!=nullptr)
       {
           fast = fast->next->next;
           slow = slow->next;
           if(fast==slow)  //表示相遇了
           {
               fast = head; //让快指针从头再来
               while(fast!=slow)
               {
                   fast = fast->next;
                   slow = slow->next;
               }
               return fast;
               break;
           }
       } 

       return nullptr;  //如果不是环
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章