【剑指offer】链表中倒数第k个节点
题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路
方法有很多,可以用一个栈来存链表中的所有节点,然后输出栈中的第k个节点就可以了;也可以用快慢指针,快指针先走k-1步之后慢指针再走,当快指针走到头时,慢指针所在的节点即倒数第k个结点;下面代码是入栈的方法。另外要判断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) {
int count = 0;
stack<ListNode*> s;
while(pListHead){
s.push(pListHead);
pListHead = pListHead->next;
count++;
}
if(k == 0 || k > count){
return NULL;
}
ListNode* t;
while(k--){
t = s.top();
s.pop();
}
return t;
}
};