2017-07-19 49 views
0

我是新來的總體規劃和剛剛使用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) 
+0

由於你正在踩着你的指針,你總是在試圖添加之前總是指向'None'一個新元素。你需要保留一個尾隨的指針,它會指向前一個元素,以便將該元素指向新的最後一個元素。 – JohanL

回答

0

的問題是你的addToTail總會有指針爲無,因爲你迭代,直到你的價值沒有在你的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 
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']