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