每天都要刷几题leetcode



看到了大神的代码,毫不犹豫拷贝下来

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution(object):"""原理:首先初始化快指针 fast = head.next.next 和 slow = head.next,此时快指针走的路长为2, m慢指针走的路长为1,之后令快指针每次走两步,慢指针每次走一步,这样快指针走的路长始终是慢指针走的路长的两倍,若不存在环,直接返回None,若存在环,则 fast 与 slow 肯定会在若干步之后相遇;性质1:设从head需要走 a 步到达环的入口,如果环存在的话,再走 b 步可以再次到达该入口(即环的长度为b),如果存在环的话,上述描述的 快指针 fast 和 慢指针slow 必然会相遇,且此时slow走的路长小于 a + b(可以自行证明),设其为 a + x,当快慢指针相遇时,快指针已经至少走完一圈环了,不妨设相遇时走了完整的m圈(m >= 1),有:快指针走的路长为 a + mb + x慢指针走的路长为 a + x由于快指针fast 走的路长始终是慢指针的 2倍,所以:a + mb + x = 2(a + x)化简可得:a = mb - x  -------------  (*)当快指针与慢指针相遇时,由于 <性质1> 的存在,可以在链表的开头初始化一个新的指针,称其为 detection, 此时 detection 距离环的入口的距离为 a,此时令 detection 和 fast 每次走一步,会发现当各自走了 a 步之后,两个指针同时到达了环的入口,理由分别如下:detection不用说了,走了a步肯定到刚好到入口fast已经走过的距离为 a + mb + x,当再走 a 步之后,fast走过的总距离为 2a + mb + x,带入性质1的(*)式可得:2a + mb + x = a + 2mb,会发现,fast此时刚好走完了整整 2m 圈环,正好处于入口的位置。基于此,我们可以进行循环,直到 detection 和 fast 指向同一个对象,此时指向的对象恰好为环的入口。"""def detectCycle(self, head):""":type head: ListNode:rtype: ListNode"""# 首先初始化快指针和慢指针,确保快指针走的路的长度是慢指针长度的2倍if head and head.next:fast = head.next.nextslow = head.nextelse:return None  # 说明无环# 进行循环,首先让快指针和慢指针第一次相遇while fast:if fast != slow:# 快指针走两步if fast.next:fast = fast.next.nextelse:return None  # 说明无环# 慢指针走一步slow = slow.nextelse:detection = headwhile detection != slow:  # 此时由于slow和fast是一样的,用哪个都行slow = slow.nextdetection = detection.nextreturn detection

我这个垃圾

class Solution(object):def detectCycle(self, head):""":type head: ListNode:rtype: ListNode"""l  = []while head and head not in l:l.append(head)head = head.nextreturn head

**

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution(object):def reorderList(self, head):""":type head: ListNode:rtype: void Do not return anything, modify head in-place instead."""if head is None or head.next is None:return#快慢指针找到链表中点sf = s = headwhile f and f.next:s = s.nextf = f.next.next#中点之后的链表反转p = c = sn = c.nextwhile n:p = cc = nn = n.nextc.next = p#c为末尾节点,双指针分别从头结点和末尾节点重构链表n1 = h1 = headn2 = h2 = cwhile h1 != h2 and h1.next != h2:n1 = h1.nextn2 = h2.nexth1.next = h2h2.next = n1h1 = n1h2 = n2h2.next = None

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution(object):def reorderList(self, head):if not head or not head.next: return L = []while head:L.append(head)head = head.nextfor i in range(len(L)//2):L[i].next = L[len(L)-i-1]L[len(L)-i-1].next = L[i+1] L[i+1].next = None

leetcode 刷题142 143相关推荐

  1. C#LeetCode刷题-链表

    链表篇 # 题名 刷题 通过率 难度 2 两数相加   29.0% 中等 19 删除链表的倒数第N个节点   29.4% 中等 21 合并两个有序链表 C#LeetCode刷题之#21-合并两个有序链 ...

  2. LeetCode 刷题之路(python版)

    摘自:https://blog.csdn.net/qq_32384313/article/details/90745354 LeetCode 刷题之路(python版) 小坏wz 2019-06-02 ...

  3. LeetCode刷题之旅

    LeetCode刷题之旅 一.链表 1.链表逆序(leetcode 206.Reverse Linked List)esay 题目描述:已知链表头节点指针head,将链表逆序. 思路:从链表的头节点依 ...

  4. C#LeetCode刷题-双指针

    双指针篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串 24.5% 中等 11 盛最多水的容器 43.5% 中等 15 三数之和 16.1% 中等 16 最接近的三数之和 34.6% 中等 ...

  5. Leetcode刷题指南和top100题目

    原文链接:https://blog.csdn.net/qq_39521554/article/details/79160815 参考博文:https://blog.csdn.net/mmc2015/a ...

  6. 一个算法笨蛋的12月leetCode刷题日记

    类似文章 一个算法笨蛋的2021年11月leetCode刷题日记 一个算法笨蛋的2021年12月leetCode刷题日记 一个算法笨蛋的2022年1月leetCode刷题日记 一个算法笨蛋的2022年 ...

  7. LeetCode刷题Python实录

    使用Python的LeetCode刷题 前言 题目 1408. 数组中的字符串匹配 508. 出现次数最多的子树元素和 1089. 复写零 剑指 Offer 14- I. 剪绳子 1175. 质数排列 ...

  8. LeetCode刷题指南——题目精选1

    这是LeetCode经典题目总结文章~ 基础:将数据结构及算法学习的差不多,LeetCode题目按类别刷题及总结,参考鄙人数据结构及算法系列文章~ 按类别将每类题目做好,大概刷250道左右的程度即可. ...

  9. Leetcode-How-What 力扣Leetcode刷题指南

    Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...

最新文章

  1. MVP架构设计 进阶三
  2. Android基础(八) – Service AIDL
  3. 自动完成--autoComplete插件(2)
  4. SparkContext转化为JavaSparkContext
  5. NOI入门级:数据结构之线性表
  6. JAVA——两个List集合求交集、并集和差集(去重)模板
  7. 学习python课程_想学习Python吗? 这是我们的免费4小时互动课程
  8. Web API——添加Swagger、SQL Server、日志记录、导出到Excel和Docker
  9. vs2013 中HTML页 无法在设计窗口中查看的解决
  10. 想让自己的网站变得精致吗?那就进来看看吧:跟随鼠标的天使
  11. LeetCode447. Number of Boomerangs
  12. JavaScript之流程控制
  13. 微信小程序教学第三章(含视频):小程序中级实战教程:列表-静态页面制作...
  14. 阿诺德图像加密c语言,三维arnold变换图像加密算法
  15. si24r1程序_SI24R1多对一通信功能(ACK模式,ACK不带PAYLOAD)程序资料开发
  16. keil5编译器出现Undefined symbol time (referred from xxx.o).
  17. 商品表设计-实现侧滑栏类目Catagory和商品的多对多关系
  18. linux 查看java版本
  19. Android开发之使用createFromStream加载图片发现图片变小
  20. Centos7配置网络

热门文章

  1. 三星应用程序照相机(在com.sec.android.app),三星智能相机软件下载-三星智能相机app下载V1.4.0官方版-西西软件下载...
  2. mysql 5.7 innodb 预热_mysql5.7 InnoDB数据表空间文件平滑迁移
  3. iOS 崩溃日志在线符号化实践
  4. 系统升级页面html,页面访问界面升级
  5. 个人永久性免费-Excel催化剂功能第28波-工作薄瘦身,安全地减少非必要冗余
  6. Oracle学习笔记:a inner join b与from a,b where a.x=b.x的差异
  7. fastjson 返回json字符串,JSON.parse 报错
  8. 服务器和客户端免密登录
  9. UVA 10976 Fractions Again?!【暴力枚举/注意推导下/分子分母分开保存】
  10. 转:多线程环境下调用 HttpWebRequest 并发连接限制