私はダウニーの「コンピューター科学者のように考える方法」を研究していますが、リンクリストのprint_backward()関数について質問があります。
まず、Pythonでのダウニーのリンクリストの実装は次のとおりです。
class Node:
#initialize with cargo (stores the value of the node)
#and the link. These are set to None initially.
def __init__(self, cargo = None, next = None):
self.cargo = cargo
self.next = next
def __str__(self):
return str(self.cargo)
このクラスには、次の貨物とリンクの値を指定します。
#cargo
node1 = Node('a')
node2 = Node('b')
node3 = Node('c')
#link them
node1.next = node2
node2.next = node3
リンクリストを印刷するには、ダウニーの別の関数を使用します。
def printList(node):
while node:
print node,
node = node.next
>>>printList(node1)
>>>a b c
すべて非常に簡単です。しかし、次の関数の再帰呼び出しによって、リンクリストを逆方向に印刷する方法がわかりません。
def print_backward(list):
if list == None : return
print_backward(list.next)
print list,
>>>print_backward(node1)
>>>c b a
print_backwardの値として「list.next」を呼び出すと、単に「bc」が得られませんか?
注:以下の何人かの人々は、この関数は不適切に設計されていると指摘しています。これは、どのリストでも、常に基本ケースに到達することを示すことができないためです。ダウニーはまた、同じ章の後半でこの問題を指摘しています。