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

问题描述

如何访问链表中的数据?主要是我有两个具体问题。我是 Python 初学者,刚刚学习链表,如果这看起来像一个愚蠢的问题,请耐心等待。

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

  2. 我有一个节点链表,其中每个节点都是一个字典。 如何在Python中使用某个键搜索链表中的节点?

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

解决方法

通常你只需要定义一个递归函数。假设您的链表定义如下:

tinymce.init({
  selector: 'textarea',// change this value according to your HTML
  plugins: 'pageembed',menubar: 'view',toolbar: 'pageembed'
});

现在遍历列表并找到具有特定值的节点相当容易:

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) 是否是字典,是否有某个key。

问题 2 的措辞很奇怪。节点不能是字典。它必须是某种形式的 Node 类。它可以包含字典,但不能是字典。

,

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

因此,对您的链表实现做一些假设:

  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')

那么,如果是类实例,就可以访问该节点的数据属性:

print(node.data)

或者,如果是字典,访问所需的键:

print(node['desired'])