タイトル説明:
リンクリストを入力し、リンクリストの下からk番目のノードを出力します。ほとんどの人の習慣に合わせるために、この質問は1から数え始めます。つまり、リンクリストの終了ノードは下から最初のノードです。たとえば、リンクリストには6つのノードがあります。ヘッドノードから始めて、それらの値は1、2、3、4、5、および6です。このリンクリストの下から3番目のノードは、値が4のノードです。
テストケース:
给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.
問題解決のアイデア:
- ダブルポインタ、2つのポインタ、フォームとテールポイントを頭に初期化します。
- フロントポインタフォームは、最初にkステップ進みます。
- 次に、フォームが終了ノードを通過するまで(つまり、null)、2つのポインターが同時に後方に移動します。
- 尻尾に戻る
デモ:
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;
}
};