题目描述:
输入一个链表,输出该链表中倒数第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) {
ListNode* p=pListHead;
stack<ListNode*> s;
while(p){//将所有链表中的非空节点入栈
s.push(p);
p=p->next;
}
int count=0;
ListNode* res;
while(!s.empty()){
count++;//记录倒数第k个节点
res=s.top();
s.pop();
if(count==k)
return res;
}
return nullptr;//链表不足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) {
if(pListHead==nullptr)
return nullptr;
if(k==0)//注意k==0的情况
return nullptr;
ListNode* p=pListHead;
ListNode* q=nullptr;
int count=0;
while(p){
count++;
if(count==k){
q=pListHead;
}
if(count>k){
q=q->next;
}
p=p->next;
}
return q;
}
};