<LeetCode天梯>Day029环形链表(哈希表+双指针) | 初级算法 | Python
Posted 府学路18号车神
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了<LeetCode天梯>Day029环形链表(哈希表+双指针) | 初级算法 | Python相关的知识,希望对你有一定的参考价值。
💖作者简介:大家好,我是车神哥,府学路18号的车神🥇
📝个人主页:应无所住而生其心的博客_府学路18号车神_CSDN博客
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
📖本系列主要以刷LeetCode(力扣)网站的各类题为标准,实现自我能力的提升为目标⚡
⚡希望大家多多支持🤗~一起加油 😁
- 专栏《LeetCode天梯》
周五,今天一直在赶论文,啊~!!!快要截止了,就一直赶赶赶,就忙到了现在,但是,刷题不止,拒绝❌内卷,从我做起,哈哈哈,还是坚持啊吧!~
每天进步一点点,就已经很棒很棒了,坚持坚持,不要太累,拒绝内卷,从每日一练开始,每天十分钟,快乐生活一辈子!疫情依旧反复,大家带好口罩啊~ 继续继续,来,今天和车神哥一起来提升自己的Python编程和面试能力吧,刷天梯~
放上我拍的Photo吧!~
今天吃了泡芙,嘻嘻嘻!好好吃,感谢翔宝的泡芙@馒头小北
每日推荐一首歌:Hymn For The Weekend [Remix] MV
以下为我的天梯积分规则:
每日至少一题:一题积分+10分
若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)
若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)
初始分为100分
若差一天没做题,则扣积分-10分(周六、周日除外注:休息)
坚持!!!
初级算法
刷题目录
链表
题干
给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
如果链表中存在环,则返回 true 。 否则,返回 false 。
示例1:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
示例2:
输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。
示例3:
输入: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
哇,这个时间真的是感人呀!!!
注意上面用的是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
快了很多,有没有,这就是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
怎么说呢,不能说效果不好吧,但是便于理解!这就很棒了~
完结撒花❀
链表小节终于结束,一周的时间,加油加油,后面还有(树、排序和搜索、动态规划、设计问题、数学和其他)小节,我们下周
再见吧!
加油,小伙伴们!~
Reference
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnarn7/
来源:力扣(LeetCode)
今日得分:+10+10+20
总得分:630加油!!!
❤坚持读Paper,坚持做笔记,坚持学习,坚持刷力扣LeetCode❤!!!
坚持刷题!!!打天梯!!!
⚡To Be No.1⚡⚡哈哈哈哈
⚡创作不易⚡,过路能❤关注、收藏、点个赞❤三连就最好不过了
ღ( ´・ᴗ・` )
❤
『
幸福的家庭都是相似的,不幸的家庭各有各的不幸。
』
以上是关于<LeetCode天梯>Day029环形链表(哈希表+双指针) | 初级算法 | Python的主要内容,如果未能解决你的问题,请参考以下文章
<LeetCode天梯>Day027 合并两个有序链表(递归法+改进递归) | 初级算法 | Python
Leetcode刷题100天—141.环形链表(链表)—day01
Leetcode刷题100天—141.环形链表(链表)—day01