Python - 是否可以在循环中生成节点?

时间:2016-02-29 09:15:59

标签: python loops nodes

并在循环时制作单链表? 像这样:

def make_nodes(n):
    head_node = Node(0,None)
    for i in range(1,n):
        node("i") = Node(i, None)
        #somehow link them 

以便命名节点: node1 node2 node3 ... node9

非常感谢提前!

2 个答案:

答案 0 :(得分:1)

不,但您可以使用列表:

def make_nodes(n):
    nodes = []
    nodes.append(Node(0,None))    # head node
    for i in range(1, n):
        nodes.append(Node(i, None))
        nodes[i-1].next = nodes[i]    #somehow link them          
    return nodes

nodes = make_nodes()
head = nodes[0]
second = nodes[1]
last = nodes[-1]

您也可以使用字典,并使用节点编号作为密钥。但在这种情况下,列表似乎更自然。

但你为什么要这样做呢?您也可以使用list的Python Node。使用列表推导可以轻松地创建节点列表。然后可以使用简单的for循环对列表进行迭代:

nodes = [Node(i) for i in range(n)]

for node in nodes:
    print(node.payload)

答案 1 :(得分:0)

您可以使用词典和/或列表来完成您想要实现的目标。

但是,如果您正在尝试测试某些数据结构以用于学习目的,您可以创建一个类Node并对其进行处理。

class Node(object):
    __data = None
    __ref_to_next = None

    def __init__(self, d):
        self.set_data(d)

    def set_data(self, d):
        self.__data = d

    def set_ref_to_next(self, r):
        self.__ref_to_next = r

    def append_a_node(self, new_node):
        cnode = self
        while cnode.__ref_to_next != None:
            cnode = cnode.__ref_to_next
        cnode.set_ref_to_next(new_node)

    def traverse(self):
        cnode = self
        while cnode.__ref_to_next != None:
            print cnode.__data
            cnode = cnode.__ref_to_next


def make_nodes(n):
    head_node = Node(0)
    for i in range(1,n):
        new_node = Node(i)
        head_node.append_a_node(new_node)

您可以使用追加功能填充链表模拟。