题目地址:
链表中环的入口结点_牛客题霸_牛客网
题目:
描述
给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。
数据范围: n\le10000n≤10000
节点值范围:[1,10000]
要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:
可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。
输入描述:
输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台将这2个会组装成一个有环或者无环单链表
返回值描述:
返回链表的环的入口结点即可。而我们后台程序会打印这个节点
示例1
输入:
{1,2},{3,4,5}
返回值:
3
说明:
返回环形链表入口节点,我们后台会打印该环形链表入口节点,即3
示例2
输入:
{1},{}
返回值:
"null"
说明:
没有环,返回null,后台打印"null"
示例3
输入:
{},{2}
返回值:
2
说明:
只有环形链表节点2,返回节点2,后台打印2
代码:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead) {
set<ListNode*> s;
ListNode* p=pHead;
int t;
while(p!=NULL)
{
t=s.size();
s.insert(p);
if(s.size()==t)return p;
p=p->next;
}
return NULL;
}
};
思路:
用set来判断链表大小,毕竟如果遇到环,set的大小就会不变了。