一、題目描述
輸入一個鏈表,輸出該鏈表中倒數第k個結點。
題目來源:鏈表中倒數第K個節點–nowcoder
二、題目解析
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
/**
* 我們不妨先檢驗參數的合法性吧,要是參數都不合法,還有什麼好做的
*/
if (pListHead == nullptr)
{
return nullptr;
}
unsigned int count = 0; // 統計鏈表節點個數
ListNode* pCur = pListHead;
while(pCur)
{
++count;
pCur = pCur->next;
}
if (count < k)
{
return nullptr;
}
// 參數檢驗合格
/**
* 雙指針解決吧:
* first 指針先走 k 步
* 然後 first 和 second 一起走,當 first 走到末尾的時候,
* 返回 second 指向的節點
*/
ListNode* first = pListHead;
ListNode* second = pListHead;
while(k--)
{
first = first->next;
}
// 然後兩個指針一起走
while(first)
{
first = first->next;
second = second->next;
}
return second;
}
};
如有問題歡迎評論區指出,謝謝大家:)