1. 程式人生 > >題型——輸入一個連結串列,輸出該連結串列中倒數第k個結點

題型——輸入一個連結串列,輸出該連結串列中倒數第k個結點

此題我們可以先定義兩個指標,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; } };