📅  最后修改于: 2023-12-03 15:08:02.084000             🧑  作者: Mango
在循环链表中搜索元素是一个常见的问题。在Python中,我们可以使用几种不同的方法来解决这个问题。其中一个解决方案是使用迭代器来循环遍历链表,另一个解决方案是使用递归方法进行搜索。本文将介绍这些不同的方法,并提供相应的Python代码示例。
使用迭代器方法循环遍历链表是一种简洁而有效的方法。将一个迭代器添加到链表中,然后通过遍历迭代器来搜索元素。
class Node:
def __init__(self, val):
self.val = val
self.next = None
class CircularLinkedList:
def __init__(self):
self.head = None
def add(self, val):
new_node = Node(val)
if not self.head:
self.head = new_node
self.head.next = self.head
else:
cur = self.head
while cur.next != self.head:
cur = cur.next
cur.next = new_node
new_node.next = self.head
def __iter__(self):
cur = self.head
while cur:
yield cur
cur = cur.next
if cur == self.head:
break
def search(self, val):
for node in self:
if node.val == val:
return True
return False
在这个示例中,我们首先定义了一个Node类来表示链表节点。接下来我们定义了一个CircularLinkedList类来表示循环链表。 add
方法用于将新元素插入链表中。 __iter__
方法返回迭代器,search
方法使用迭代器遍历链表搜索目标元素。
使用递归是另一种在循环链表中搜索元素的方法。通过递归调用搜索方法,我们可以在整个链表上实现深度优先搜索。以下是相应的Python代码示例:
class Node:
def __init__(self, val):
self.val = val
self.next = None
class CircularLinkedList:
def __init__(self):
self.head = None
def add(self, val):
new_node = Node(val)
if not self.head:
self.head = new_node
self.head.next = self.head
else:
cur = self.head
while cur.next != self.head:
cur = cur.next
cur.next = new_node
new_node.next = self.head
def search_rec(self, node, val):
if node.val == val:
return True
elif node.next == self.head:
return False
else:
return self.search_rec(node.next, val)
def search(self, val):
return self.search_rec(self.head, val)
在这个示例中,我们定义了一个search_rec
方法,它使用深度优先搜索遍历整个链表并搜索目标元素,search
方法调用search_rec
方法来搜索目标元素。
以上是在循环链表中搜索元素的两种Python程序。使用迭代器和递归方法都能够在循环链表中搜索目标值,它们各有优缺点。通过使用这些方法之一,我们可以轻松查找循环链表中的元素。