链表判环练习

案例一:如何判断一个单链表是否有环?有环的话返回进入环的第一个节点的值,无环的话返回-1。如果链表的长度为N,请做到时间复杂度O(N),额外空间复杂度O(1)。

给定一个单链表的头结点head(注意另一个参数adjust为加密后的数据调整参数,方便数据设置,与本题求解无关),请返回所求值。

思路:快慢指针分别指向头节点,快指针每次走两个节点,慢指针每次走一个节点,如果快指针先指向空,则为无环,否则快慢指针会在环中某个节点相遇,相遇后,将快指针移到头节点,然后快慢指针每次都走一步,最终在入环点相遇。

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class ChkLoop:
    def chkLoop(self, head, adjust):
        # write code here
        slow = head
        fast = head
        while fast.next:
            slow = slow.next
            fast = fast.next.next
            if not fast:
                return -1
            if fast==slow:
                break
        if not fast.next:
            return -1
        fast = head
        while fast!=slow:
            fast = fast.next
            slow = slow.next
        return fast    # 注意题目要返回的是什么东西,盲目的
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-10 15:24
高考前一晚在OPPO手机上设置了早上5:30的闹钟,然而闹钟并未按时响起。直到妈妈做好早餐后,在6:27打开手机才发现闹钟未触发,“气得早上饭都没吃”。资本家你赢了
永不遗忘:我来解释一下 :Oppo 手机晚上两点会自动进行系统更新,这个系统更新会重置掉所有设置好的闹钟,而且他也不会告诉你,而且只有 Oppo 会这样,华为苹果小米三星都不会
点赞 评论 收藏
分享
后来123321:别着急,我学院本大二,投了1100份,两个面试,其中一个还是我去线下招聘会投的简历,有时候这东西也得看运气
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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