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