题解 | #链表中环的入口结点#

链表中环的入口结点

https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4

运用双指针求解,快指针和慢指针,快指针一次移动两个结点,慢指针一次移动一个结点。

1、如果链表中有环结构,先用双指针找到环内的结点;

2、再将其中一个指针移动到头结点,两个结点同时每次移动一个结点,下次相遇时就是环的入口结点

时间复杂度:o(n)

空间复杂度:o(1)

class Solution {
  public:
    ListNode* EntryNodeOfLoop(ListNode* pHead) {
        //特殊情况处理
        if (pHead == nullptr || pHead->next == nullptr)
            return nullptr;

        ListNode* slow = pHead;
        ListNode* fast = pHead;
        ListNode* pnode = nullptr;
		//如果链表中有环结构,先用双指针找到环内的结点
        while (fast != nullptr && fast->next != nullptr) {
            slow = slow->next;
            fast = fast->next->next;
            if (slow == fast) {
                pnode = slow;
                break;
            }    
        }
	  	//得到环的入口结点
        if (pnode != nullptr) {
            while (pHead != pnode) {
                pHead = pHead->next;
                pnode = pnode->next;
            }
            return pnode;
        } else {
            return nullptr;
        }
    }
};

刷题题解(c++) 文章被收录于专栏

算法题题解(c++)

全部评论

相关推荐

06-12 16:50
已编辑
小米_软件开发(准入职员工)
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务