题目链接
142. 环形链表 II - 力扣(LeetCode)
题目描述
给定一个链表,如果链表有环,则返回链表开始入环的第一个节点,如果没有环,返回null
输入输出样例
1 2 3
| 输入:head = [3,2,0,-4], pos = 1 输出:返回索引为 1 的链表节点 解释:链表中有一个环,其尾部连接到第二个节点。
|
题目解释
快慢指针
代码
个人实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Solution { public: ListNode* detectCycle(ListNode* head) { ListNode *fast = head, *slow = head; do { if (!fast || !fast->next) return nullptr; fast = fast->next->next; slow = slow->next; } while (fast != slow);
fast = head; while (fast != slow) { slow = slow->next; fast = fast->next; } return fast; } };
|
官方实现
作者:力扣官方题解
链接:https://leetcode.cn/problems/linked-list-cycle-ii/solutions/441131/huan-xing-lian-biao-ii-by-leetcode-solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class Solution { public: ListNode *detectCycle(ListNode *head) { unordered_set<ListNode *> visited; while (head != nullptr) { if (visited.count(head)) { return head; } visited.insert(head); head = head->next; } return nullptr; } };
|