如何在Python中从链表中的节点提取数据?



如何访问链表中的数据?我主要有两个具体问题。我是python的初学者,只是学习链表,所以如果这看起来像是一个愚蠢的问题,请原谅我。

  1. 我有一个节点链表,其中每个节点是一个类的实例。
    如何检索具有特定实例属性= x的链表中的节点?

  2. 我有一个节点链表,其中每个节点是一个字典。如何在Python中搜索具有特定键的链表中的节点?

目前,除了使用str打印之外,我无法访问节点中的信息方法。

通过遍历链表来访问链表中的数据。您需要从头部开始,检查它包含的数据是否是您要查找的,如果不是,则遍历到下一个节点。

那么,对链表的实现做一些假设:

  1. 您需要从头节点开始,遍历列表,直到找到所需的数据属性值。

如果所需的数据属性值不在链表中,则可以使用返回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
  1. 如果链表中的每个节点都是一个字典,这意味着你的链表实际上是一个嵌套字典,每个嵌套字典包含一个键,'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类。它可以包含字典,但不能是字典。

相关内容

  • 没有找到相关文章

最新更新