用于将项目添加到链接列表末尾的功能

时间:2017-07-19 21:52:57

标签: python linked-list

我是一般的编程新手,刚刚开始使用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)

2 个答案:

答案 0 :(得分:2)

您的问题在于addToTail()函数的这一部分:

ptr = myList
while ptr != None:
     ptr = ptr['next']

您基本上是循环,直到没有下一个节点且ptr设置为None。然后,当您尝试为节点分配ptr['next'] = node时,它显然会失败,因为您尝试访问None,而不是尾节点。您可以通过在分配之前检查下一个项目来解决此问题(与您的风格保持一致):

ptr = myList
while True:
    if ptr['next'] is None:
        break
    ptr = ptr['next']

答案 1 :(得分:0)

问题是你的<table> <thead> <tr><td>Date</td></tr> </thead> <tbody> <tr ng-repeat="day in vm.dates"> <td>{{day}}</td> </tr> </tbody> </table> 总是将指针指定为None,因为你正在迭代直到你的while循环中的值为none。添加一个指向链表中前一个元素的额外变量 - 这样,您将获得列表中的最后一个值而不是None。

addToTail