<LeetCode天梯>Day029环形链表(哈希表+双指针) | 初级算法 | Python

简介: <LeetCode天梯>Day029环形链表(哈希表+双指针) | 初级算法 | Python

以下为我的天梯积分规则:


每日至少一题:一题积分+10分

若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)

若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)


初始分为100分

若差一天没做题,则扣积分-10分(周六、周日除外注:休息)

坚持!!!


初级算法

刷题目录

链表


image.png

image.png

题干

给你一个链表的头节点 head ,判断链表中是否有环。


如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。


如果链表中存在环,则返回 true 。 否则,返回 false 。


示例1:

image.png

输入:head = [3,2,0,-4], pos = 1

输出:true

解释:链表中有一个环,其尾部连接到第二个节点。

示例2:

image.png

输入:head = [1,2], pos = 0

输出:true

解释:链表中有一个环,其尾部连接到第一个节点。

示例3:

image.png

输入:head = [1], pos = -1

输出:false

解释:链表中没有环。


哈希表

分析:


今年,有些累了,先吧框架搭在这里吧!~

更新日志:2021/11/20

我只最终只需要判断内部有没有环,内部有一个pos,当为-1的时候则为没有环,输出false;相反,则输出True。

其中我们可以先将链表的值放在一个list哈希表中,然后判断当前的节点是否存在。

class Solution:
    def hasCycle(self, head: ListNode) -> bool:
        hashmap = []
        while head:
            if  head in hashmap:
                return True
            hashmap.append(head)
            head = head.next
        return False

哇,这个时间真的是感人呀!!!

image.png

注意上面用的是list,下面我们用集合来看看会不会快一些!~

class Solution:
    def hasCycle(self, head: ListNode) -> bool:
        hashmap = set()
        while head:
            if  head in hashmap:
                return True
            hashmap.add(head)
            head = head.next
        return False

image.png

快了很多,有没有,这就是set()的妙用啊!哈哈哈,下面咱们在用双指针试试~


双指针

分析:


使用一个快指针m和慢指针n,如果最终m和n相等,那么就返回True,否则,返回False。

慢指针针每次走一步,快指针每次走两步,如果相遇就说明有环,如果有一个为空说明没有环。

class Solution:
    def hasCycle(self, head: ListNode) -> bool:
    # 双指针
        if not head:
            return False
        # 设置两个指针快和慢
        fast = head
        slow = head
        while fast != None and fast.next != None:
            slow = slow.next    # 慢走一步
            fast = fast.next.next    # 快走两步
            # 设置判断,如果相遇则说明有环
            if fast == slow:
                return True
            # 否则False
        return False


image.png

相关文章
|
1月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
69 1
|
1月前
|
算法 Java 数据库
数据结构与算法学习十五:哈希表
这篇文章详细介绍了哈希表的概念、应用实例、实现思路,并提供了使用Java实现的哈希表代码。
53 0
数据结构与算法学习十五:哈希表
|
1月前
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
46 0
|
1月前
|
算法
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
44 0
|
1月前
|
算法
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
32 0
|
1月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
93 0
|
22天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
22天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
存储 缓存 算法
经典算法之链表篇(三)
经典算法之链表篇(三)
|
1月前
|
算法
经典算法之链表篇(二)
经典算法之链表篇(二)