題型——輸入一個連結串列,輸出該連結串列中倒數第k個結點
阿新 • • 發佈:2019-01-09
此題我們可以先定義兩個指標,p和q。讓p和q都指向頭結點。在定義一個i,i的初始值為0。然後進入一個for迴圈,直到p走到連結串列結尾,每次i++。當i < k 的我們讓p走,q不走。當i >= k 的時候我們讓p和q同時走一步。當p走到結尾的時候,那麼q走的值就是倒數k的位置,我們返回這個值就好了。
我們在用圖來說明一下
我們假設k = 3,即輸出連結串列中倒數第3個結點的值。
一開始p和q都指向頭結點,當i < 3 的我們讓p走,q不走。
此時i = 3了,當i >= 3的時候,我們讓p和q同時走。
當p走到末尾時,此時q對應的位置就是k的位置,即倒數第三個結點。
下面我們來實現一下程式碼。
class Solution{
public:
ListNode* FindKthToTail(ListNode* pListHead,unsigned int k){
ListNode* p = pListHead;
ListNode* q = pListHead;
int i = 0;
for(;p != NULL;i++)
{
if(i >= k)
{
q = q->next;
}
p = p->next ;
}
return i < k ? NULL:q;
}
};