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