SwordはOffer22を参照します-リンクリストの下からk番目のノード-簡単

質問リンク

タイトル説明:

リンクリストを入力し、リンクリストの下からk番目のノードを出力します。ほとんどの人の習慣に合わせるために、この質問は1から数え始めます。つまり、リンクリストの終了ノードは下から最初のノードです。たとえば、リンクリストには6つのノードがあります。ヘッドノードから始めて、それらの値は1、2、3、4、5、および6です。このリンクリストの下から3番目のノードは、値が4のノードです。

テストケース:

给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.

問題解決のアイデア:

  1. ダブルポインタ、2つのポインタ、フォームとテールポイントを頭に初期化します。
  2. フロントポインタフォームは、最初にkステップ進みます。
  3. 次に、フォームが終了ノードを通過するまで(つまり、null)、2つのポインターが同時に後方に移動します。
  4. 尻尾に戻る

デモ:

1.フォームとテールの両方が1を指します
ここに画像の説明を挿入
。2。フォームが最初に2ステップ移動し、フォームが3を指します。3。
ここに画像の説明を挿入
フォームがヌルを指すまで、フォームとテールが同時に後方に移動し、テールが戻ってきた。
ここに画像の説明を挿入

ACコード(c ++)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
    
    
public:
    ListNode* getKthFromEnd(ListNode* head, int k) {
    
    
        ListNode * form = head;
        ListNode * tail = head;
        while(k--)
        {
    
    
            tail = tail->next;
        }
        while(tail){
    
    
            tail = tail->next;
            form = form->next;
        }
        return form;

    }
};

おすすめ

転載: blog.csdn.net/Yang_1998/article/details/113041168