📜  在循环链表中搜索元素的Python程序(1)

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

在循环链表中搜索元素的Python程序

在循环链表中搜索元素是一个常见的问题。在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程序。使用迭代器和递归方法都能够在循环链表中搜索目标值,它们各有优缺点。通过使用这些方法之一,我们可以轻松查找循环链表中的元素。