鏈表中倒數第K個節點

一、題目描述

輸入一個鏈表,輸出該鏈表中倒數第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;
    }
};

如有問題歡迎評論區指出,謝謝大家:)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章