题解 | #带环链表的第一个公共结点#

链表中环的入口结点

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

    思路:
    1、快慢双指针,先判断是否有环,无环返回NULL,有环找到环内第一次交点
    2、然后快指针回到链表头,与慢指针一起单步遍历
    3、第二次相遇,既为入口地址
    注意:
    **找环内第一个相遇点时,一定要先移动指针,再判断是否相遇,因为初始化快慢指针均指向链表头,如果不移动,则直接满足相遇并退出**
    
class Solution:
    def EntryNodeOfLoop(self, pHead):
        
        if not pHead:
            return
        
        slow, fast = pHead, pHead
        
        # 找环内第一次相遇点
        while True: # 快慢指针先移动再判断,如果以fast及fast.next是否为空为循环条件,如果出现单节点则快慢指针不会移动,最后返回第一个节点为答案
            # 判断是否有环
            if not fast or not fast.next:
                return
            
            fast = fast.next.next 
            slow = slow.next
            
            # 判断环内第一次交点
            if fast == slow:
                break
        
        # 快指针移动到链表头
        fast = pHead
        # 快慢指针共同遍历
        while fast != slow:
            fast = fast.next
            slow = slow.next 
        
        return fast
全部评论

相关推荐

大猪蹄子哥:1-谁教你这么写教育经历的……咱都这个学历了,很多公司要看本科、硕士,Gap Year的,你啪就给一个上大26届硕士,没了。 2-那堆奖学金揉成一行放最后得了,放前面显得你没技术自信,还是那句话,对于咱这个学历直接上重点,你这上半段看起来像个大专(无恶意 3-专业技能最好点出来细化方向,你熟悉的以太网是UDP还是TCP,是千兆还是万兆等等,多种信号处理……那你倒是说两个啊,后面空着干嘛,会的干嘛不讲 4-项目经历废话太多,描述不专业(怎么还有我,我们这种词),没有数据支撑(是婴儿还是巨人看不出来)。最后如果这些是真的XX项目、比赛,最好点出来,不然更显得像自学着玩的,或者说抄的(经典复现等于我做过 5-个人总结在咱这个分段没用
点赞 评论 收藏
分享
没有offer的呆呆:薪资有的时候也能说明一些问题,太少了活不活得下去是一方面,感觉学习也有限
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务