鏈表倒數第K個節點

題目描述:

輸入一個鏈表,輸出該鏈表中倒數第k個結點。

解題關鍵:

代碼的魯棒性(對於不合理的情況,予以處理),也就是莫要忘記節點數小於K的情況。

解題思路:

使用棧存儲每一節點,相當於將鏈表進行倒序排放,然後判斷節點數與K的大小,當K<總節點數時,連續出棧K次,獲得倒數第K個節點,否則返回NULL;

C++實現代碼

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
    
        ListNode *kNode=NULL;
        ListNode *pNode=pListHead;
        stack<ListNode *> nodes;
        int count=0;
        while(pNode!=NULL)
            {
            nodes.push(pNode);
            pNode=pNode->next;
            count++;
        }
        if(count<k)
            {
            return NULL;
        }
        for(int i=0;i<k;i++)
            {
            if(!nodes.empty())
                {
                kNode=nodes.top();
                nodes.pop();
            }
        }
        return kNode;
    }
};


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