[リスト] LEETCODE19は最後から二番目のn個のノードを削除します

//最初の溶液、走査数の長さは、端と端を接続した後、再び横断
クラスのソリューション{ 
パブリック:
    ListNode removeNthFromEnd *(* ListNodeヘッド、N-INT){ 
        ListNode TEM * =ヘッド; 
        INT LEN = 0; 
        一方( tem->次){//これは、得られた長さの真の長さ-1 
            TEM TEM- =>次に、
            LEN ++; 
        } 
        (LEN == 0 IF)戻りNULL; 
        IF(LEN == 1){ 
            (N IF - == 1){ 
                頭部>次に= NULL; 
            } 
            そうヘッド=頭部>次に、
            リターン・ヘッド; 
        } 
        TEM->次に=ヘッドと、終了する//接続端
        ListNode *尾= TEMと、 
        ため(INT i = 0; iが lenの-N + 1 <。 フロントは、削除するノードに到達するまで、私は、最後のノードから逸脱//){++;あなたはノードがヘッダーで削除したい場合は、移動しません。
            = TEM- TEM>次に; 
        } 
        ListNodeのゴミ箱* = TEM->次に; //ノードを削除するには
        、あなたが最後に、そうでない場合は最後から二番目の文を削除したい場合は、//となります。tail->次= NULLを接続リングヘッダ
        、TEM->次に= trash->次に
        IF(ゴミ箱==ヘッド)ヘッド=頭部>次に、
        tail->次に= NULL; 
        ヘッドを返します; 
        
    } 
}。

  

//上記の分類は非常に困難であり、実際には、2つのパス、完全に不要
//特殊なケースでは、無料と関与頭と尾のトラブルを避けるために、及び方法の良い使用は空のリストヘッドプラスノードである

クラスのソリューション{ 
公共:
    ListNode removeNthFromEnd *(* ListNodeヘッド、N-INT){ 
        ListNodeダミー=新しい新しいListNode×(0); 
        dummy->次に=ヘッド; 
        ListNodeヘッド* = R&LT; 
        INT LEN = 0; 
        ながら(R&LT){ 
            R&LT R- = >次に、
            LEN ++; 
        } 
        R&LTダミー=; 
        {(; I <-n-LEN I ++はI = 0の整数)のための
            R&LT = R->次に; 
        } 
        R->次に= R->ネクスト>次に、
        dummy-返します>次に; 

        
    } 
}。

  

第二は、ノードを削除する前に、場合尾ランキングを到着、二つのポインタ、第2のnノードよりも第1の高速を横断製//解決3、。
{ソリューションクラス
パブリック:
    ListNode removeNthFromEnd *(* ListNodeヘッド、N-INT){ 
        ListNodeダミー=新しい新しいListNode×(0); 
        dummy->次に=ヘッド; 
        ListNodeダミー= F *、S * =ダミー; 
        のための(INT I = 0、I <N - 、I ++){ 
            F = F->次に; 
        } 
        ながら(F->次に){ 
            F = F->次に、
            S = S->次に; 
        } 
        S->次に= S->ネクスト>次に、
        dummy->次にを返します; 
    } 
}。

  

おすすめ

転載: www.cnblogs.com/rarecu/p/11520482.html