考虑我们有一个链表,我们必须检查是否有任何循环。为了表示给定链表中的循环,我们将使用一个称为pos的整数指针。此pos表示链接列表中连接了tail的位置。因此,如果pos为-1,则链表中没有循环。例如,链表类似于[5、3、2、0,-4、7],而pos =1。所以有一个循环,尾部连接到第二个节点。
为了解决这个问题,我们将遵循以下步骤-
取一组作为哈希集H
而head不为null-
如果head存在于H中,则返回true
将头加到H
头:=头的下一个
返回False
让我们看下面的实现以更好地理解-
class ListNode: def __init__(self, data, next = None): self.data = data self.next = next def make_list(elements): head = ListNode(elements[0]) for element in elements[1:]: ptr = head while ptr.next: ptr = ptr.next ptr.next = ListNode(element) return head def get_node(head, pos): if pos != -1: p = 0 ptr = head while p < pos: ptr = ptr.next p += 1 return ptr class Solution(object): def hasCycle(self, head): hashS = set() while head: if head in hashS: return True hashS.add(head) head = head.next return False head = make_list([5,3,2,0,-4,7]) last_node = get_node(head, 5) pos = 1 last_node.next = get_node(head, pos) ob1 = Solution()print(ob1.hasCycle(head))
List = [5,3,2,0,-4,7] Pos = 1
输出结果
True