题目:链表中倒数第k个结点
题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路
①用栈压进去,pop出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) {
stack<ListNode *> s;
while(pListHead!=NULL){
s.push(pListHead);
pListHead = pListHead->next;
}
if(k>s.size() || k<=0) return NULL; // 注意这里k可能为0的情况
while(k!=1){
s.pop();
k--;
}
return s.top();
}
};
②用两个指针,一个指针先走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==NULL) return NULL;
ListNode *l=pListHead;
ListNode *r=pListHead;
while(k>1 && r->next){
r = r->next;
k--;
}
if(k!=1) return NULL;
while(1){
if(r->next == NULL) return l;
r = r->next;
l = l->next;
}
}
};