输入一个链表,输出该链表中倒数第k个结点。
思路:
两个指针
一个往前走k次,然后再判断,
总长度只有k的时候,稍微麻烦一些。
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead==NULL)
return NULL;
ListNode* tmp_follow=pListHead;
ListNode* tmp_head=pListHead;
while(k--){
tmp_head=tmp_head->next;
if(tmp_head->next==NULL)
if(k!=1)
return NULL;
else
return tmp_follow;
}
while(tmp_head!=NULL)
{
tmp_head=tmp_head->next;
tmp_follow=tmp_follow->next;
}
return tmp_follow;
}
};
思路2:
走k-1次,然后判断前指针的下一个是否为null
/*
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* tmp_follow=pListHead;
ListNode* tmp_head=pListHead;
int k1=k-1;
while(k1--){
tmp_head=tmp_head->next;
if(tmp_head==NULL)
return NULL;
}
/*if(tmp_head->next==NULL)
return tmp_follow;*/
while(tmp_head->next!=NULL)
{
tmp_head=tmp_head->next;
tmp_follow=tmp_follow->next;
}
return tmp_follow;
}
};