オファー-14を獲得。最後から二番目のKリンクリストノード(C ++ / Java)の

トピック:

入力されたリンクリスト、リンクリスト出力の逆数k番目のノード。

分析:

第一の溶液は、我々が最初に、再度リストをトラバースnはノードの総数を計算することができ、その後、すなわち、kは最後から二番目のノードのヘッドノードのNKチェックノードです。

第2の解決策は、次に、ポインタが最初のノードの端に到達したとき、両手を有する第2の進行、両方のポインタは、最初のノードにK-1ノードに第ポインタ進歩を指している、二重ポインタの使用でありますポインタの指節我々の要求です。

また、kが0の場合はNULLを返すように、kはリンクされたリスト内のノードの数よりも大きい場合、NULLを返すべきであることに留意されたいです。

手順:

C ++

/ * 
構造体ListNode { 
    int型のval; 
    次のstruct ListNode *; 
    ListNode(INT X):
            ヴァル(x)は、次の(NULL){ 
    } 
}。* / 
クラスソリューション{
 パブリック
    ListNode * FindKthToTail(ListNode * pListHead、符号なし整数のK){
         場合(pListHead == nullptr || K == 0 戻りnullptr。
        ListNode * pFirst = pListHead。
        ListNode * pSecond = pListHead。
        以下のためにint型私は= 0 I <K-;1 ; ++ I){
             もし!(pFirst->次= nullptr)
                pFirst = pFirst-> 次。
            それ以外
                の戻りnullptr; 
        } 
        ながら(!pFirst->次= nullptr){ 
            pFirst = pFirst-> 次。
            pSecond = pSecond-> 次。
        } 
        戻りpSecondと、
    } 
}。

ジャワ

/ * 
パブリッククラスListNode { 
    int型のval; 
    ListNode次= NULL; 

    ListNode(int型のval){ 
        this.val =ヴァル。
    } 
} * / 
パブリック クラスソリューション{
     公共 ListNode FindKthToTail(ListNodeヘッド、INT K){
         場合(ヘッド== NULL || K == 0 リターン ヌル
        ListNode pFirst = ヘッド。
        ListNode pSecond = ヘッド。
        
        以下のためにINT I 0 =; I <K-1; ++ I){
             もし(!pFirst.next = ヌル
                pFirst = pFirst.next。
            他の
                リターン はnull ; 
        } 
        一方(pFirst.next!= NULL ){ 
            pFirst = pFirst.next。
            pSecond = pSecond.next。
        } 
        戻りpSecondと、
    } 
}

おすすめ

転載: www.cnblogs.com/silentteller/p/11879142.html