如何访问链表中的数据?我主要有两个具体问题。我是python的初学者,只是学习链表,所以如果这看起来像是一个愚蠢的问题,请原谅我。
-
我有一个节点链表,其中每个节点是一个类的实例。
如何检索具有特定实例属性= x的链表中的节点? -
我有一个节点链表,其中每个节点是一个字典。如何在Python中搜索具有特定键的链表中的节点?
目前,除了使用str打印之外,我无法访问节点中的信息方法。
通过遍历链表来访问链表中的数据。您需要从头部开始,检查它包含的数据是否是您要查找的,如果不是,则遍历到下一个节点。
那么,对链表的实现做一些假设:
- 您需要从头节点开始,遍历列表,直到找到所需的数据属性值。
如果所需的数据属性值不在链表中,则可以使用返回None的函数来完成此操作。我将假设您的链表节点有一个方法,next_node,如果它是尾部实例,则返回None。
def traverse_to_desired_node(head : LinkedListNode, desired : Any):
node = head
while node.data != desired:
node = node.next_node()
if node is None:
return None
return node
- 如果链表中的每个节点都是一个字典,这意味着你的链表实际上是一个嵌套字典,每个嵌套字典包含一个键,'next'或其他东西,尾部有None作为'next'的值。
类似的方法也可以:
def traverse_to_desired_node(head : dict, desired : str):
node = head
while desired not in node:
node = node['next']
if node is None:
return None
return node
现在,无论使用哪一种方法,您都可以为节点设置一个变量:
node = traverse_to_node(head, 'desired')
然后,如果它是一个类实例,您可以访问该节点的data属性:
print(node.data)
或者,如果它是一个字典,访问所需的键:
print(node['desired'])
通常只需要定义一个递归函数。假设您的链表定义如下:
class Node:
def __init__(self, val):
self.val = val
self.next = None
现在遍历列表并查找具有特定值的节点相当容易:
def find(node: Node, search_val):
if not node:
return None
else:
if node.val == search_val:
return node
else:
return find(node.next, search_val)
同样,您可以修改此函数以检查node.val
是否为字典,以及它是否具有某个键。
问题2的表达方式很奇怪。Node不能是字典。它必须是某种形式的Node类。它可以包含字典,但不能是字典。