リンクリストの下からK番目のノードを2ポインターでリートコードします

THE

問題

ここに画像の説明を挿入

成し遂げる

アイデア

まず、この問題には修正された解決策があります。リンクリストの長さを直接取得することはできず、カウントダウンもわからないため、高速ポインタと低速ポインタ
使用してnを先に進めることを検討できます。、そして同時に2つ。高速ポインタが移動するとき最後に、低速ポインタはカウントダウンkに到達しました。

  • 高速低速ポインタを定義する
  • i <kの場合
    • fast = NULLブレークの場合。
      • fast = fast-> next;
  • while§
    • fast ++
    • 遅い++
  • 戻る

まとめと考察

  1. (fast)は空のステップと同等ですが、ここでは説明しません。ループ条件がfast.nextまたはfastを使用するように統合されているかどうかは、慎重に検討する必要があります。??????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ???????????????????????????????? ここでは、<size()と同等のfastを使用することにしました。また、fast.nextは<= size-1と同等です。

コード


/*
struct ListNode {
   int val;
   struct ListNode *next;
   ListNode(int x) :
   		val(x), next(NULL) {
   }
};
*/
/*
struct ListNode {
   int val;
   struct ListNode *next;
   ListNode(int x) :
   		val(x), next(NULL) {
   }
};*/
class Solution {
    
    
public:
   ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
    
    
       auto fast =  pListHead;
       auto slow =  pListHead;

       for(unsigned int i= 0 ;i<k;i++){
    
    
           if(!fast) return NULL;
           else fast = fast->next;
       }
       while(fast){
    
    
           fast = fast->next;
           slow = slow->next;
       }
       return slow;
   }
};

おすすめ

転載: blog.csdn.net/liupeng19970119/article/details/114013298