检查给定链表是否为循环链表17 Mar 2025 | 6 分钟阅读 在本教程中,我们将编写 Python 程序来检查给定的链表是否为循环链表。我们将了解确定循环链表的各种高效方法。假定您熟悉链表和循环链表的基本概念(可以跳过介绍部分)。如果您不熟悉链表,让我们简要回顾一下链表。 什么是链表?链表是一种线性数据结构,它存储下一个元素的地址。每个元素称为节点,节点包含数据和下一个元素的内存地址。我们可以通过指针访问链表中的元素,第一个节点称为头节点。 与数组相比,链表具有优势,因为它动态地存储元素,而数组的大小是固定的。在链表中,我们可以轻松地插入和删除元素。 循环链表循环链表是一种链表,其中最后一个指针字段指向列表中的一个元素。另一方面,前一个元素的下一个指针字段值为null。当我们遍历整个链表而没有到达 NULL 时,链表中就存在一个循环。 ![]() 如何检查给定的链表是否为循环链表?根据两种链表的定义,我们在遍历链表时可以轻松找出。
让我们来理解一下解决方案。 解决方案 - 1按照以下步骤检查给定的链表是否为循环链表。
让我们来理解下面的代码。 示例 - 输出 The given linked list is not a circular list The given linked list is a circular list 解释 - 在上面的代码中,我们创建了一个 Node 类来初始化链表的节点。然后我们创建了一个 LinkedList 类,它将指向链表的头节点;最初,它是 None。最后,我们定义了 CircularList 函数,该函数确定给定的链表是否为循环链表。 在此函数中,我们检查 head 是否等于 None。如果为 True,则返回 True。如果 head 不为 None,则将 head 的下一个元素赋值给 current,并将 i 初始化为零。然后我们定义了一个 while 循环,该循环将一直运行,直到 current 不为 None 且 current 不为 head。如果循环终止条件成立,则返回 current 是否等于 head。 解决方案 - 2:双指针解决方案我们可以使用两个具有不同速度的指针来确定给定的链表是否为循环链表。我们定义一个 slow 指针和一个 fast 指针。我们使用这些指针来遍历链表。慢指针一次移动一步,快指针一次移动两步。 如果链表不是循环的,则快指针将到达下一个指针为 null 的元素的末尾。 让我们来理解一下这个方法。
让我们将上述方法实现到 Python 代码中。 示例 - 输出 The Given list is a circular list 解释 - 我们在上面的代码中创建了 Node 和 LinkedList 类来初始化节点和 head。然后我们创建了 circular_list() 函数,该函数接受 head 作为参数。如果 head 为 None,则链表不存在;否则,我们将慢指针赋值为 head,将快指针赋值为 head 的下一个元素。然后迭代链表,直到 slow 不等于 fast。在循环中,我们检查 fast 指针是否为 None 或 fast 的下一个元素是否为 None;如果条件为 true,我们返回链表不是循环链表。否则,我们将 slow.next 元素赋值给慢指针,并将 fast.next.next 元素赋值给快指针。如果慢指针和快指针相等,则表示给定的链表是循环链表。循环结束,返回 true 表示循环链表。 双指针解决方案的复杂度分析如果链表没有循环,快指针将到达末尾。因此,在这种情况下,时间复杂度为 O (n)。如果链表有循环,我们需要计算快指针追赶慢指针所需的步数。让我们来理解两个指针的移动。 慢指针需要 K 步才能进入循环,此时快指针已经在循环中,并且距离慢指针在链表方向上有一个元素。 总运行时间将为 0 (K+D),其中 K 是从 head 到循环起始元素之间的元素数量。D 代表慢指针到达循环时两个指针之间的距离。空间复杂度为 O (1)。 结论在本教程中,我们学习了如何检查链表是否为循环链表。我们讨论了两种解决方案,第一种是暴力方法,第二种是双指针方法。双指针方法易于实现,而且效率更高。 下一主题在 Python 中反转链表 |
在本文中,您将了解 del 和 pop 之间的区别。但在讨论区别之前,您必须了解 Python 中 del 和 pop 及其示例。Python 中的 del 是什么?"del" 是 Python 内置语句,用于删除……
阅读 4 分钟
飞船泰坦尼克号问题是基本泰坦尼克号生存问题的进阶版本,机器学习爱好者必须面对一次,并预测一个人的生存几率。飞船泰坦尼克号项目问题说明 在这个项目中,一艘飞船载着许多人进行太空旅行。……
14 分钟阅读
您有两种主要选择来为 PyQt 窗口和对话框构建 GUI:要么使用 Qt Designer,要么在纯 Python 代码中手动设计 GUI。虽然第二种方法使您可以完全控制应用程序的代码,但第一种方法可以显着提高...
18 分钟阅读
在已创建的产品中发现故障的过程称为软件测试。此外,它还可以评估实际结果是否与预期结果相符,并有助于识别错误、缺失的需求或差距。这是产品最终在...之前的最后一步。
阅读 23 分钟
Python 的条件语句根据特定的布尔条件计算为真或假来执行各种计算或操作。在 Python 中,IF 语句处理条件语句。在本教程中,我们将学习如何使用 Python 中的条件语句。什么是 Python If 语句?要创建...
阅读 3 分钟
Python 是最流行的编程语言之一,以其简洁性和可读性而闻名。然而,作为一种语言,它仍然容易受到错误和缺陷的影响,这可能会给开发人员带来重大问题。为了缓解这些问题,Python 社区开发了许多...
阅读 6 分钟
在本教程中,我们将学习如何使用 Python 创建不同类型的空心金字塔图案。程序 1:在 Python 中制作简单空心金字塔的程序 代码:def hollow_pyramid( r ) : m = 0 for n in range(1, r +...
阅读 6 分钟
Python 的内置 ConfigParser 库是基础模块的一部分。该库提供了一个控制台解析器,用于轻松配置由键值对组成的文件。该库支持的全球公认的流行约定是“INI”语法,最常用于 Microsoft 平台。...
7 分钟阅读
ipware 模块是一个 Python 库,它在 Web 应用程序的上下文中提供了有关客户端 IP 地址信息的实用工具。它包括从各种来源(如 HTTP 标头和 WSGI 环境)检测客户端 IP 地址的函数,并提供...
阅读9分钟
在本教程中,我们编写程序来对 0、1 和 2 的列表进行排序。这里 0、1 和 2 的列表的含义是列表仅包含 0、1 和 2 形式的数据。例如,一个包含 11 个元素的数组...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India