leetcode-JZ22

1387 ワード

問題面
チェーンテーブルを入力し、チェーンテーブルの最後からk番目のノードを出力します.多くの人の習慣に合うように、本題は1から数え始めます.すなわち、チェーンテーブルの末尾ノードは最後から1番目のノードです.
たとえば、チェーンテーブルには6個のノードがあり、最初から1、2、3、4、5、6個の値があります.このチェーンテーブルの最後から3番目のノードは、4の値を持つノードである.
例:
      : 1->2->3->4->5,   k = 2.

     4->5.

原題リンク
ぶんせき
区間スライド思想は、コード注釈を見ればよい
ソースコード(注釈部分が構想)
/**
 * 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) {
        int n=1;
        ListNode* tmp = head;
        ListNode* backup = head;
        //   k    1
        if(n==k){
            tmp = backup;
            backup = head;
        }
        //    head  k  ,  head   k    head_before_k,  head     ,head_before_k     
        while(head->next!=NULL){
            head = head->next;
            n++;
            if(n==k){
                tmp = backup;
                backup = head;
            }
            if(n>k){
                tmp = tmp->next;
            }
            
            
        }
 
        return tmp;
    }
};