链表中环的入口节点

链表中环的入口结点

https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4?tpId=13&tqId=11208&tPage=3&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

这道题是典型的逻辑题,由于链表位置的记录需要借助指针;对于本题而言,关键是查询链表的折返的目的节点;在链表中不能通过值来确定位置,必须通过next指针的指向来唯一确定(对于单向链表,仅一个指针);另外,单链表有个特点:要成环,就不会有指向nullptr的next指针。
程序是这样的:如果链表没有环,则必有next指针指向nullptr,否则,必有环,我们构造死循环(一定有环,所以肯定可以退出);q节点每次向后移动一个节点,go节点从链表头节点开始向后遍历;如果go节点超过了q节点,说明尚未构成环,否则,go节点不会超过q节点;需要注意的是头节点也可能是
环的入口节点。缺点是:时间复杂度有点高~hh;
--ffg

class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
if(pHead == nullptr || pHead->next ==nullptr)
return nullptr;
ListNode* p = pHead;
ListNode* go;
ListNode* q = p->next;
while(q->next != NULL)
{
go = p;
if(go == q->next)
return go;
for(; go != q->next ; go = go->next)
if((go != q)&&(go->next == q->next))
return go->next;
q = q->next;
}
return nullptr;
}
};

全部评论

相关推荐

昨天 09:08
裁应届生,一分钱补偿没有,离职了还脑控你,跟踪你,定位你,丁东服务是搞系每一个人
牛客吹哨人:建议细说...哨哥晚点统一更新到黑名单:不要重蹈覆辙!25届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1317104
叮咚买菜稳定性 10人发布 投递叮咚买菜等公司10个岗位 >
点赞 评论 收藏
分享
11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
HNU_fsq:建议直接出国,这简历太6了。自愧不如
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务