2016-12-01 4 views
0

リンクリストを移動する私は「リンクリスト」を定義する彼らのコードはhereを見つけることができるコーディングインタビュー第6版を割れて作業して「次へ」Pythonの:「次へ」

のその定義が不明ですよ。私はランダムリンクリストの最後の要素からkthを見つける2番目の練習を試しています。

マイコード:

from LinkedList import LinkedList 

def kth_to_last(ll, k): 
    num_seen = 0 
    length_list = count_length(ll) 

    val = ll.head 

    # ISSUE IS HERE 
    while val.next != None: 
     print 'hi' 
     val.next = val.next.next 

    """ 
    while num_seen < (length_list - k): 
     val = val.next 
     num_seen += 1 
    """ 
    return val.next 


# Counts length of LL 
def count_length(ll): 
    val = ll.head 
    count = 1 
    while val.next != None: 
     count += 1 
     val.next = val.next.next 
    return count 


ll = LinkedList() 
ll.generate(10, 0, 99) 
print(ll) 
kth_to_last(ll, 3) 

それはリストをうまく数えていますが、最初の定義のために、私はそれがリンクリスト内を移動するために得ることができない(それはで「こんにちは」印刷されませんすべて)。

私はコメントアウトしたようなことをしています(私たちはそれを試してみるために「テール」も定義されています)。しかし、なぜ 'count_length'内でリストを動かすことができるのか混乱します。それで私は 'kth_to_last'の中でそれを動かすことができないのですか?

編集:明確にするために、私は「kth_to_last」内val.next印刷する場合、それは

EDIT2「なし」の値があります:私はちょうど「count_length、」次の進行をコメントアウトした場合

を良い。誰かがこの関数を呼び出すのが次のように変わる理由を私に説明できますか?それはリストの最後に私をくっついたのですか?

マイコード:これはうまく

答えて

1

リストを出力

def kth_to_last(ll, k): 
    """ 
    num_seen = 0 
    length_list = count_length(ll) 
    """ 

    # Start at head 
    val = ll.head 
    while val.next != None: 
     print val.next 
     val = val.next 

あなたが代わりにval.next = val.next.nextval = val.nextを行う必要があります。あなたがそれをやっている方法では、count_lengthに電話すると、リストは1つの要素に切り捨てられます。 kth_to_lastの先頭にあるcount_lengthを実行しているため、リストを歩き回る頃には('hi'の場合)、リストはすでに1つのノードに縮小されています。

ここで、linked listは、各ノードのnextプロパティが次のノードへのポインタである構造であることを覚えておいてください。あなたのコードは、リンクリストの構造を変更しているnextの値を変更しています。

リンクリスト(count_length、またはkth_to_last)を処理するときは、各ノードを順番に指すようにしてください。ノード自体を変更しようとしていないので、valueまたはnext属性には割り当てません。これを行う方法は、ポインタ(val)が指しているものを変更することです。次に指し示すものは次のノードです。したがって:

val = ll.head 
while val is not None: 
    # do something with val here 
    val = val.next 
+0

ありがとう@ウィルウィルヒルム、それは意味がある、私はそれを修正します。 – Monica

+0

だから私が "val_next"をコメントアウトすれば、問題は "count_length"という私の呼び出しであるように見えます。なぜ、長さを数えると、llが変わるのですか? – Monica

+0

@wildwilhelmありがとう、私はあなたの完全なコメントを見ました - それは完全な意味があります。ありがとうございました! – Monica