首页 > 其他分享 >leedcode 环形链表

leedcode 环形链表

时间:2024-02-28 10:58:49浏览次数:19  
标签:head slow leedcode fast next 链表 环形 指针

快慢指针:

class Solution:
    def hasCycle(self, head: Optional[ListNode]) -> bool:
        # 如果链表为空或者只有一个节点,肯定不存在环
        if not head or not head.next:
            return False

        # 初始化慢指针和快指针
        slow = head
        fast = head.next

        # 开始循环,直到快指针达到链表末尾
        while slow and fast and fast.next:
            # 如果慢指针和快指针相遇,说明存在环
            if slow == fast:
                return True

            # 移动慢指针一步
            slow = slow.next
            # 移动快指针两步
            fast = fast.next.next

        # 如果循环结束仍未找到相遇点,说明链表中不存在环
        return False

 

标签:head,slow,leedcode,fast,next,链表,环形,指针
From: https://www.cnblogs.com/yyyjw/p/18039279

相关文章

  • 【力扣】反转链表II
    题目描述思路老样子,还是先用递归试试。在基本问题中,也就是left==rigth或者left+1==right时,直接将两个元素调换顺序即可。我突然发现代码随想录里好像讲过一个用双指针法反转链表的算法。那道题是把整个链表翻转,代码如下://双指针法classSolution{public:ListN......
  • 【力扣】分隔链表
    题目描述思路先想到的一个方法是快慢指针扫描小于x的结点,然后把这些节点插入到慢指针后面去,但是写着写着好像发现这个题也可以用递归来写,后面的若干个结点的子表和整个问题的性质是一样的。普通方法的代码如下://只是大致是这样,这个代码还有一些用例跑不过classSolution{p......
  • 代码随想录 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.0
    LeetCode:24.两两交换链表中的节点-力扣(LeetCode)思路:第一步:两两交换要考虑循环什么时候退出,当cur指针.next是null是就到尾部了,同理,链表不是奇数就是偶数,cur.next.next是空也是。第二步循环条件判断完了接下来要实现交换,如图所示,按步骤来就好,提前将1,2,3存好,接下来按图......
  • 环形缓冲区
    最近需要重写处理串口不定长数据,期望实现一种通用的方法,以便日后处理诸如网口之类的数据包。为了一次性解决不完整包,粘包等特殊数据包,想到了这种方法。思路就是将所有接受到的数据放入环形缓冲区,那么应用程序就可慢一点过来取数据再处理。关于环形缓冲区的介绍很多,这里不做详细......
  • leedcode 验证回文串
    自己写的:classSolution:defisPalindrome(self,s:str):#将字符串转换为小写,以便进行大小写不敏感的比较s_lower=s.lower()#获取字符串的长度n=len(s_lower)#创建一个空列表,用于存储字母和数字......
  • linux内核链表 --20240225
    提起linux内核链表,首先一定得弄清楚的两个linux内核常用宏offsetof&&container_ofoffsetof宏#defineoffsetof(TYPE,MEMBER)((size_t)&((TYPE*)0)->MEMBER)宏解析:1、size_t在系统中一般指unsignedint,无符号整型2、(TYPE*)0,把0地址强制转换成type结构体类型的指针......
  • leedcode 买卖股票的最佳时机
    暴力解法,最后内存爆了classSolution:defmaxProfit(self,prices):n=len(prices)ifn==1:return0ifn>1000:return3profit=[]foriinrange(n):cur=i+1whilecur......
  • 【力扣】删除排序链表中的重复元素II
    题目描述思路这些链表的有序性使这些操作都不难写。前面在数组的题目里写过跳过重复元素的算法,这个和那个类似,用快慢指针写,但是由于这个是删除重复元素,所以我用了两个相邻的慢指针,左边的慢指针其实是为了保存真正的慢指针的上一个位置。代码如下:classSolution{public:......
  • 【力扣】旋转链表
    题目描述思路首先用双指针法向后移动,分别获取链表的最后一个结点和倒数第k的结点,再把这部分连接到链表的头部即可,这部分的操作并不难。但是实际这样写了之后就会发现,如果链表的长度小于k的话,这样的操作就是行不通的,需要对这种情况进行特殊处理。但是在处理过程中发现这个操作......
  • 【力扣刷题】合并两个有序链表
    题目描述分析这道题实际的解法是要通过递归来写,由于链表的特性:链表的任何一个子表都是链表。所以很多链表的算法用递归来写会非常简便。这里先尝试着写一下非递归的算法,再写一遍递归的算法。非递归:classSolution{public://voidInsert(ListNode*node1,ListNode*n......