Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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 - Fatal编程技术网

Python 用于将项添加到链表末尾的函数

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

我对编程基本上是新手,刚刚开始使用python。我最近一直在学习链表,在使用函数将项目添加到列表末尾时遇到了问题。下面列出的名为addToTail的函数不起作用,它给了我一个错误:TypeError:“NoneType”对象不支持项分配。任何帮助都将不胜感激,谢谢

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
。您需要保留一个指向上一个最后一个元素的尾随指针,以便使该元素指向新的最后一个元素。