0

ランダムな値のリストを取得してそれを連結リストにするために再帰を使用するにはどうすればよいでしょうか? 各値はノードです。今のところ、私は次のことを実装しようとしました...

def pyListToMyList(pylst):
        lists = mkMyList()
        lists.head = pyListToMyListRec(pylst)
        return lists

def pyListToMyList(pylst):            
        if pylst:
                return mkEmptyNode()
        else:
                return mkNode(pylst[0], pyLstToMyListRec(pylst[1:]))

問題は、インデックスが範囲外であるというエラーを返すelseステートメントです。

4

1 に答える 1

1
def pyListToMyList(pylst):            
    if not pylst:
        return mkEmptyNode()
    else:
        return mkNode(pylst[0], pyLstToMyListRec(pylst[1:]))

編集:すべてのリストのコピーのため、これは O(n^2) ですが。

私はするだろう

def pyListToMyList(pylst, i=0):
    if i > len(pylst):
        return mkEmptyNode()
    else:
        return mkNode(pylst[i], pyLstToMyListRec(pylst, i+1))

またはさらに効率的で、スタックがオーバーフローする可能性が低くなります (ただし、これは再帰を使用しません):

def pyListToMyList(pylst):
    lst = mkEmptyNode()
    for x in reversed(pylist):
        lst = mkNode(x, lst)
    return lst
于 2013-11-09T21:20:49.817 に答える