[路飞]_环形链表
回忆过去,展望2022
回想入行前端的已经有4年多快5年了,还清晰的记得拿到第一个offer的那种激动,到入职后的那种惶恐,那种感觉也只有自己能体会。对于大龄青年转行it能找到工作真的挺不容易的,入职后由于自己的年纪相对来说也比较的大和学得也不算太好。很多项目上的东西都不懂,但是也不敢轻易的问其他人,都是靠自己模仿现有的项目代码,还有百度、google各种搜来写,有时候深夜写代码到凌晨都不不一定搞得定。一直在逼着自己去多学点东西,不行给点钱买视频,晚上、周末恶补,所以在入职一年后也是得到公司一些领导的认可的,觉得我的业务能力还可以,可以让我提升下职级。但是没多久我就跳槽到了另外一间公司了,毕竟跳槽薪资涨的快。到了第二间公司,很快感觉自己的能力就只是写业务代码,其他好像也没有什么提升了。毕竟是干it,感觉特别是前端那种焦虑感特别的强烈,首先是因为前端的技术栈更新特别快,其次就是个人年龄原因,身边的同事都是比我小的,而我的年龄又匹配不上对应的年龄职级上,感觉自己特别的尴尬。每次别人说道年龄问题的时候我都不好意思回答。后来自己又花了比较多的钱去学了一门课程,想提升下自己。一开始的时候觉得自己交了那么多钱,肯定有动力去坚持学好,结果很快就打脸了。没坚持多久,这个课程就没有学了。后面都是断断续续的看看,掌握的程度就没有一直坚持学和坚持敲代码的效果好,不过有学总比没有学的。对比身边的同事,感觉自己知道和了解的东西感觉是多那么一点。而且在第三次换工作的时候也确实帮助到我了。今年我也34岁了,虽然在现在的公司我勉强算一个前端的负责人,但是大部分的工作也还是在写业务代码。感觉自己也不能一直这样下去了。必须逼自己一把,让自己可以更加的优秀,今天是学习算法的第一天也是2022的第一天,希望新的一年了有一个新的开始,做更好的自己。也感谢然叔两次的电话,通过电话我毅然决定了报这次的课程跟着然叔和一群优秀的人一起学习,我觉得这个是一个培养学习习惯的过程。虽然不知道自己最后是否可以进大厂,但是我相信我一定会有所成长。
题目介绍
给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
如果链表中存在环,则返回 true 。 否则,返回 false 。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/li…
解法一
解题思路
通过正常的遍历,给每个节点通过map做标记,如果节点map含有了这个节点了说明是个环形,否则遍历结束,没有找到相同的节点,不是环形
function hasCycle(head) {
let map = new Map()
while(head) {
if (map.has(head)) return true
map.set(head, head)
head = head.next
}
return false
}
解法二
解题思路
通过快慢指针的方法解题,定义两个指针,一个快,一个慢,如果快慢指针相遇了说明是环形,否则不是环形
function hasCycle(head) {
let slow = head
let fast = head
while (fast && fast.next) {
if (fast === slow) return true
fast = fast.next.next
slow = slow.next
}
return false
}