//最初の溶液、走査数の長さは、端と端を接続した後、再び横断 クラスのソリューション{ パブリック: 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->次にを返します; } }。