LeetCode:チェーンテーブルの最後からk番目のノード
タイトル説明:チェーンテーブルを入力し、チェーンテーブルの最下位からk番目のノードを出力します.多くの人の習慣に合うように、本題は1から数え始めます.すなわち、チェーンテーブルの末尾ノードは最後から1番目のノードです.たとえば、チェーンテーブルには6つのノードがあり、先頭ノードから1、2、3、4、5、6の順に値が表示されます.このチェーンテーブルの最後から3番目のノードは4のノードです.
例:
チェーンテーブルを1->2->3->4->5とk=2とする.
チェーンテーブル4->5に戻る.
考え方:ダブルポインタ.最初のポインタはk個のノードを先に進み、2個のポインタは一緒に進み、最初のポインタがチェーンテーブルの末尾に達すると、2番目のポインタはちょうど最後からk番目のノードに進む.
例:
チェーンテーブルを1->2->3->4->5とk=2とする.
チェーンテーブル4->5に戻る.
考え方:ダブルポインタ.最初のポインタはk個のノードを先に進み、2個のポインタは一緒に進み、最初のポインタがチェーンテーブルの末尾に達すると、2番目のポインタはちょうど最後からk番目のノードに進む.
/**
* 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 *first=head,*second=head;
int count=0;
while(first!=NULL){
first=first->next;
if(count<k)
count+=1;
else if(count==k){
second=second->next;
}
}
return second;
}
};