题目描述:
输入一个链表,输出该链表中倒数第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;
}
};