Python 用于将项添加到链表末尾的函数
我对编程基本上是新手,刚刚开始使用python。我最近一直在学习链表,在使用函数将项目添加到列表末尾时遇到了问题。下面列出的名为addToTail的函数不起作用,它给了我一个错误:TypeError:“NoneType”对象不支持项分配。任何帮助都将不胜感激,谢谢Python 用于将项添加到链表末尾的函数,python,linked-list,Python,Linked List,我对编程基本上是新手,刚刚开始使用python。我最近一直在学习链表,在使用函数将项目添加到列表末尾时遇到了问题。下面列出的名为addToTail的函数不起作用,它给了我一个错误:TypeError:“NoneType”对象不支持项分配。任何帮助都将不胜感激,谢谢 def addToHead(myList, value): node = {} node['data'] = value node['next'] = myList return node def a
def addToHead(myList, value):
node = {}
node['data'] = value
node['next'] = myList
return node
def addToTail(myList, value):
ptr = myList
while ptr != None:
ptr = ptr['next']
node = {}
node['data'] = value
node['next'] = None
ptr['next'] = node
return myList
def printList(myList):
ptr = myList
while ptr != None:
print(ptr['data'])
ptr = ptr['next']
print('None')
def createList(pythonList):
linkedList = None
for i in pythonList:
linkedList = addToHead(linkedList, i)
return linkedList
firstList = createList([5, 10, 15])
addToTail(firstList, 10)
printList(firstList)
问题是您的
addToTail
将始终将指针设置为None,因为您一直在迭代,直到while循环中的值为None为止。添加一个额外的变量,该变量指向链表中的前一个元素-这样,您将获得列表中的最后一个值,而不是无值
def addToTail(myList, value):
ptr = myList
prev = ptr
while ptr != None:
prev = ptr
ptr = ptr['next']
node = {}
node['data'] = value
node['next'] = None
prev['next'] = node
return myList
问题是您的
addToTail
将始终将指针设置为None,因为您一直在迭代,直到while循环中的值为None为止。添加一个额外的变量,该变量指向链表中的前一个元素-这样,您将获得列表中的最后一个值,而不是无值
def addToTail(myList, value):
ptr = myList
prev = ptr
while ptr != None:
prev = ptr
ptr = ptr['next']
node = {}
node['data'] = value
node['next'] = None
prev['next'] = node
return myList
您的问题在于
addToTail()
函数的这一部分:
ptr = myList
while ptr != None:
ptr = ptr['next']
实际上,您一直在循环,直到没有下一个节点,ptr
设置为None
。随后,当您尝试使用ptr['next']=node
分配节点时,它显然会失败,因为您尝试访问None
,而不是tail节点。您可以通过在分配之前检查下一项来解决此问题(以保持您的风格):
ptr = myList
while True:
if ptr['next'] is None:
break
ptr = ptr['next']
您的问题在于
addToTail()
函数的这一部分:
ptr = myList
while ptr != None:
ptr = ptr['next']
实际上,您一直在循环,直到没有下一个节点,ptr
设置为None
。随后,当您尝试使用ptr['next']=node
分配节点时,它显然会失败,因为您尝试访问None
,而不是tail节点。您可以通过在分配之前检查下一项来解决此问题(以保持您的风格):
ptr = myList
while True:
if ptr['next'] is None:
break
ptr = ptr['next']
由于您正在步进指针,因此在尝试添加新元素之前,您总是指向
None
。您需要保留一个指向上一个最后一个元素的尾随指针,以便使该元素指向新的最后一个元素。由于您正在步进指针,因此在尝试添加新元素之前,您总是指向None
。您需要保留一个指向上一个最后一个元素的尾随指针,以便使该元素指向新的最后一个元素。