1. 程式人生 > >【資料結構】連結串列相關練習題:連結串列中倒數第k個結點

【資料結構】連結串列相關練習題:連結串列中倒數第k個結點

題目描述:輸入一個連結串列,輸出該連結串列中倒數第k個結點。

分析:這個題同樣是引入快慢指標,為了遍歷一次就找到倒數第k個節點,可以定義兩個指標:fast指標從連結串列的頭指標開始遍歷向前走k-1(k)步,slow指標保持不動;從第k步開始,slow指標開從連結串列的頭指標遍歷;由於兩個指標的距離保持在k-1(k)步,當fast指標到達連結串列的尾結點(NULL)時,slow指標正好就走到倒數第k個結點的位置。

程式碼如下:

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
    struct ListNode* fast=pListHead;
    struct ListNode* slow=pListHead;
        while(k--)
        {
            if(fast)
            {
           fast=fast->next;
            }
            else
            {
                return NULL;
            }
            
        }
        while(fast)
        {
            slow=slow->next;
            fast=fast->next;
        }
       return slow; 
    }
};