题目:输入一个链表,输出该链表中倒数第k个结点
思路1 : 求出数组元素的个数count,然后向前扫描count-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 * list=pListHead;
int count=0;
while(list!=NULL){
count++;
list = list->next;
}
if(k>count ||k<1){
return NULL;
}
for(int i=1;i<=count-k;i++){
pListHead = pListHead->next;
}
return pListHead;
}
};
思路2: 用两个指针指向头结点, 第一个指针向前扫描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 * first=pListHead;
ListNode * second = pListHead;
int i=1;
for(i=1;i<=k;i++){
if(first!=NULL){
first = first->next;
}
else{
break;
}
}
if(i<=k&&first==NULL){
return NULL;
}
while(first!=NULL){
first=first->next;
second = second->next;
}
return second;
}
}