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