剣指offer面接問題05----チェーンテーブルを最初から最後まで印刷する

1091 ワード

タイトル:チェーンテーブルを入力し、チェーンテーブルの各ノードの値を末尾から印刷します.リストが空の場合は[]を出力します.
思考:面接ではチェーンテーブルに関する問題が多く、これは比較的簡単なもので、まずチェーンテーブルノードのクラスを定義し、チェーンテーブルを構築する必要があります.チェーンテーブルの値を最初から最後まで印刷するのは簡単で、直接順番に印刷すればいいことを知っています.しかし一方向チェーンテーブルについては、逆方向に印刷しようとするとポインタを戻すこともできないので、チェーンテーブルの要素を順番に1つのリストに保存し、最後にリストの要素を逆方向に出力すればよい.
Pythonコードは以下の通りです
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    #               ,  [1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        ls = []

        if listNode is None:
            return ls

        while listNode.next:
            ls.append(listNode.val)
            listNode = listNode.next

        ls.append(listNode.val)

        return ls[::-1]

s = Solution()
l1 = ListNode('a')
l2 = ListNode('b')
l3 = ListNode('c')
l1.next = l2
l2.next = l3
print s.printListFromTailToHead(l1)
# ['c', 'b', 'a']

PS:リストを遍歴する際に境界を越えることを避けるためにlistNodeを判断することができることに注意する.nextが存在するか否かを終了条件PS 2:ls[::-1]としてリスト反転を実現できる