2017-03-01 10 views
0
def return_node(self, head, position): 
    if position == 0: 
     # return the node correctly 
     return head 
    else: 
     self.return_node(head.next_node, position - 1) 

def insert_at_position(self, head, data, position): 
    if position == 0: 
     self.insert_first(head, data) 
    elif position == self.length: 
     self.insert_last(head, data) 
    else: 
     previous_node = self.return_node(head, position - 1) 
     # previous_node's value is None instead of the method's return value 
     next_node = self.return_node(head, position) 
     # same here 
     new_node = Node(data, next_node) 
     previous_node.next_node = new_node 
     self.length += 1 

特定の位置にノードを挿入するメソッドをリンクリストに実装しようとしています。問題は、変数 'previous_node'と 'next_node'が正しく値を取得していないことです。 ノード値の代わりに、None値を取得しています。君たちありがとう!何リターンキーワードが存在しないため変数がメソッドの戻り値をPythonで受け取っていません

+3

return_nodeのは、 '' else'は何もreturn'しません。 – RemcoGerlich

+1

おそらく、 'return self.return_node(head.next_node、position - 1)'を行うことを意図していました。 –

答えて

6
else: 
    self.return_node(head.next_node, position - 1) 

は、何も返しません。

return self.return_node(head.next_node, position - 1)

あなたが探している何をします。戻るには何も値が提供されていない場合には、関数から返されるデフォルト値であるため、

+0

ありがとうございました!私はそれを逃すとは信じられません... – flpn

2

あなたの変数がNoneに設定されている理由は、次のとおりです。

def foo(): 
    pass 


>>> type(foo()) 
<class 'NoneType'> 

return_node()の内部else節は戻らないので値は、PythonはNoneを返します。あなたは再帰的return_nodeを呼び出し、その後の呼び出しによって返された値を返すようにしたい場合は、returnを使用する必要があります。

def return_node(self, head, position): 
    if position == 0: 
     # return the node correctly 
     return head 
    else: 
     return self.return_node(head.next_node, position - 1) # use return 
関連する問題