2017-07-19 10 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

ポインタをステッピングしているので、追加しようとする前に、常に「なし」を指していることになります。スタイルを維持するには、次の項目をチェックします。新しい要素。その最後の要素を指し示すために、前の最後の要素を指し示す末尾のポインタを保持する必要があります。 – JohanL

答えて

0

問題は、あなたの価値があなたのwhileループではnoneですまであなたが反復しているので、あなたのaddToTailは常に、なしなどのポインタを持つことになりますです。リンクされたリストの前の要素を指し示す余分な変数を追加します.-そのようにして、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'] 

あなたは何の次のノードが存在しなくなるまで、実質的にループしているとptrNoneに設定されています。その後、ノードをptr['next'] = nodeに割り当てようとすると、テールノードではなくNoneにアクセスしようとすると明らかに失敗します。

ptr = myList 
while True: 
    if ptr['next'] is None: 
     break 
    ptr = ptr['next'] 
関連する問題