Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中向链表添加节点_Python_Linked List_Nodes - Fatal编程技术网

在Python中向链表添加节点

在Python中向链表添加节点,python,linked-list,nodes,Python,Linked List,Nodes,函数的作用是:将一个值作为参数。值连续多次传递给addToList()函数 def addToList(value): node = {} node["data"] = value node["next"] = None head = node 问题是:如何创建许多不同的节点?传入的每个值都应分配给一个节点。只有第一个节点应等于头部。现在,我正在创建一个节点,给它一个值,然后当下一个值出现时,我覆盖我创建的节点,而不是创建一个新节点。每个新节点如何指向不同的[“

函数的作用是:将一个值作为参数。值连续多次传递给addToList()函数

def addToList(value):
    node = {}
    node["data"] = value
    node["next"] = None
    head = node

问题是:如何创建许多不同的节点?传入的每个值都应分配给一个节点。只有第一个节点应等于头部。现在,我正在创建一个节点,给它一个值,然后当下一个值出现时,我覆盖我创建的节点,而不是创建一个新节点。每个新节点如何指向不同的[“下一个”]?如果我提前知道我的值,我可以手动编程每个节点。当我不知道将有多少个值,并且这些值将被输入到函数中时,我不知道如何生成新的和唯一的节点。

要使每个节点指向正确的下一个问题,最简单的答案是将函数设置为

def addToList(value):
    node = {}
    node["data"] = value
    node["next"] = None
    head[next] = node
    head = node
但你需要在其他地方跟踪你的名单的真正头条,这样你以后就可以从头到尾地浏览你的名单了

这是一个完整的例子

head={}
head["data"] = "start"
head["next"] = None
start = head
def addToList(value):
    global head
    node = {}
    node["data"] = value
    node["next"] = None
    head["next"] = node
    head = node

addToList("second")
addToList("third")

print start
它会打印这个

{'data': 'start', 'next': {'data': 'second', 'next': {'data': 'third', 'next': None}}}

几乎有两种可能性(除非您想使用面向对象的代码,否则还有第三种选择)。为了简单起见,我假设我们在列表的前面(而不是末尾)添加元素

全球范围 也就是说,您一次只有一个列表

head = None
def addToList(value):
    global head
    head = {'value': value, 'next': head}

addToList(3)
addToList(5)
addToList(11)
print head
或使用实际列表:

actual_list = []
def addToList(value):
    global actual_list
    actual_list.append(value)

addToList(3)
addToList(5)
addToList(11)
print actual_list
两个论点 再次使用实际列表

def addToList(value, actual_list):
    actual_list.append(value)

actual_list = []
addToList(3, actual_list)
addToList(5, actual_list)
addToList(11, actual_list)
print actual_list

addToList应该接受两个参数。值和当前头(列表),否则您可能在要扩展的全局范围中有一个列表。列表本身表示头?反过来说,头表示列表这将不起作用
head
是python中此类范围内的局部变量,它将引发错误。加上将head[next]和head本身指定给相同的值没有意义当执行head[next]=节点head指向最后一个head,这是最后一个对象,因此我们使最后一个head对象指向这个新节点。然后我们将最后一个节点设为新节点,这样在下一次插入时,我们将得到正确的头部。重新思考itExample使用“global”,答案不是:-)加上变量“head”不存储列表的“head”,它存储一个“tail”(引用最后一个元素)。按照两个参数的路线,您将如何遍历链接列表?您将head作为参数并循环。没有区别。特别是,打印已经在“遍历”它,正如您可以通过运行代码段看到的那样。
def addToList(value, actual_list):
    actual_list.append(value)

actual_list = []
addToList(3, actual_list)
addToList(5, actual_list)
addToList(11, actual_list)
print actual_list