📜  搜索双向链表中的元素(1)

📅  最后修改于: 2023-12-03 14:54:45.009000             🧑  作者: Mango

搜索双向链表中的元素

双向链表是一种链表结构,它的每个节点都有两个指针,一个指向前一个节点,一个指向后一个节点,因此可以实现前后遍历。在双向链表中,如果想要查找某个元素是否存在,可以从头节点或尾节点开始依次遍历,直到找到该元素或者遍历完整个链表都没有找到。

以下是示例代码,用于在双向链表中搜索指定元素:

class Node:
    def __init__(self, data):
        self.data = data
        self.prev = None
        self.next = None
 
class DoublyLinkedList:
    def __init__(self):
        self.head = None
     
    def insert_at_beginning(self, data):
        if self.head is None:
            new_node = Node(data)
            self.head = new_node
        else:
            new_node = Node(data)
            self.head.prev = new_node
            new_node.next = self.head
            self.head = new_node
     
    def insert_at_end(self, data):
        if self.head is None:
            new_node = Node(data)
            self.head = new_node
        else:
            n = self.head
            while n.next is not None:
                n = n.next
            new_node = Node(data)
            n.next = new_node
            new_node.prev = n
     
    def search(self, data):
        if self.head is None:
            print("List is empty")
            return
        n = self.head
        while n is not None:
            if n.data == data:
                return True
            n = n.next
        return False

以上代码中:

  • Node类表示链表中的一个节点,包含data属性表示节点存储的数据、prev属性表示前一个节点、next属性表示后一个节点。
  • DoublyLinkedList类表示一个双向链表,包含head属性表示链表头。其中,insert_at_beginning(data)方法表示在链表头插入一个数据为data的节点,insert_at_end(data)方法表示在链表尾插入一个数据为data的节点,search(data)方法表示在链表中查找数据为data的节点,有则返回True,否则返回False

使用示例:

# 创建一个双向链表
dl = DoublyLinkedList()

# 在链表头和尾分别插入一些数据
dl.insert_at_beginning(10)
dl.insert_at_beginning(20)
dl.insert_at_end(30)
dl.insert_at_end(40)

# 查找节点
print(dl.search(20)) # True
print(dl.search(50)) # False
总结

双向链表支持前后遍历,并且在中间插入或删除节点时效率稍高于单项链表。在搜索双向链表中的元素时,可以从头节点或尾节点开始依次遍历,直到找到该元素或者遍历完整个链表都没有找到。