2012-01-23 9 views
1

Pythonを使用して長さnのリンクリストを作成しようとしています。私はシンプルリストが実装されている、作業連結関数、および作業create_list関数を持っています。ただし、連結されたリストを作成する際に、連結機能(テスト用に作成されたもの)を使用するより効率的な方法があるかどうかを知りたいだけです。Pythonでn-lengthのリンクリストを作成する方法をもっと速く

シンプルリストクラス:

class Cell: 

    def __init__(self, data, next = None): 
     self.data = data 
     self.next = next 

を連結機能:

def list_concat(A, B): 
    current = A 
    while current.next != None: 
     current = current.next 
    current.next = B 
    return A 

リスト作成(それは永遠に取る!):

def create_list(n): 
    a = cell.Cell(0) 
    for i in (range(1,n)): 
     b = cell.Cell(i) 
     new_list = cell.list_concat(a, b) 
    return new_list 
+2

はこの宿題ですか?もしそうでなければ、実際にはリンクリストをPythonで実装するのはあまり意味がないので、 'list'を使うか、それを継承してください。 – juliomalegria

+0

はい、これはアルゴリズムクラスのテスト目的です。リスト作成を効率的にする必要はありませんが、実装した方法よりも効率的な方法があるのだろうかと思います。 –

+0

http://codereview.stackexchange.com/この種の質問のためのより良い場所かもしれません。 – charlax

答えて

1

あなたのコードを改善するための最も簡単な方法はこれです:

def create_list(n): 
    new_list = cell.Cell(0) 
    last_a = new_list 
    for i in (range(1,n)): 
     a = cell.Cell(i) 
     cell.list_concat(last_a, a) 
     last_a = a 
    return new_list 

これは、O(n ** 2)からO(n)までのアプローチの複雑さを軽減します。

+0

concatenate関数は、この実装を使用して2つの要素のみを持つリストを返します。これは既存のリストを上書きし続けるようです。 –

+0

@ChristianBenincasa:申し訳ありません、修正されました。 –

関連する問題