2016-11-19 1 views
0

私はコーディングインタビューの本を読んでいた。リンクされたリストのトピックをカバーしながら、私は質問2で立ち往生しました。私は再帰的でないバージョンを考え出すことができました。しかし、私が本の解決策を検討しようとしている間、私は解決策を理解できませんでした。誰かがそれで私を助けることができるかどうか疑問に思っていましたか? コーディングインタビューのクラッキングリンクリストQ2

public static int nthToLast(SListNode head, int k){ 
    if(head == null){ 
     return 0; 
    } 

    int i = nthToLast(head.next, k) +1; 
    System.out.println("Node data is: " + head.item); 
    System.out.println("i is: " +i); 
    System.out.println("k is: " + k); 
    if(i<=k){ 
     System.out.println(head.item); 
    } 
    return i; 

} 

だから、このコードでは、私は私をint = nthToLast(head.next、k)は、コードの1行を確認していることを信じて最後のノードへのヘッドポインタを指します。しかし、私は最初のノードから最後のノードへのポインタの変更の背後にあるこのメカニズムを理解することはできません。誰も私がこのコード行を理解するのを助けて、リンクリストの最初のノードから最初のノードにポインタを変更する方法はありますか?

答えて

1

この関数は、最後の頭でnullになるまで次の頭を渡しているので、ゼロを返すので、最後のnull頭に応じて多くの関数呼び出しがあり、ゼロと評価されます。その最後のヘッドに達すると、最終的には0 + 1と評価され、次にiとKが出力され、i(現在は1)が保留中の関数呼び出しに渡され、1 + 1になり、新しいi +あなたが最初のポインタに達するまでそう。

+0

ありがとう!それは理にかなっている! :) – user3293890

+0

あなたの歓迎!答えがあなたのコンテンツの場合は、答えをマークしてください:) –

関連する問題