📜  资质| Wipro模拟测试|问题10(1)

📅  最后修改于: 2023-12-03 15:12:14.591000             🧑  作者: Mango

资质 | Wipro 模拟测试 | 问题10

本篇文章将介绍 Wipro 模拟测试中的第10个问题:如何判断一个链表是否为循环链表。

问题描述

给定一个链表,如何判断这个链表是否为循环链表(即链表中存在一个节点,其后继节点指向该链表中的前驱节点)。

解决方案

要判断一个链表是否为循环链表,我们可以使用两个指针来遍历链表,一个指针(称为"慢指针")每次移动一个节点,另一个指针(称为"快指针")每次移动两个节点。如果存在循环,则"快指针"最终会追上"慢指针"。

具体实现过程如下:

def is_cyclic_linked_list(head):
    slow = head
    fast = head

    while fast is not None and fast.next is not None:
        slow = slow.next
        fast = fast.next.next

        if slow == fast:
            return True

    return False

上述代码中,我们首先将"慢指针"和"快指针"同时指向链表头节点,然后在每次循环中,我们将"慢指针"移动一个节点,"快指针"移动两个节点。如果"快指针"追上了"慢指针",则说明链表中存在循环。

总结

本篇文章介绍了 Wipro 模拟测试中的第10个问题:如何判断一个链表是否为循环链表。我们可以通过使用"慢指针"和"快指针"来遍历链表并判断其中是否存在循环。