题目描述
输入一个链表,输出该链表中倒数第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 (k==0 || !pListHead) return nullptr;
//方法1
/*int pLen=0;//计算链表长度
ListNode *head=pListHead;
while(head){
pLen++;
head=head->next;
}
if (k>pLen) return nullptr;
int n=pLen-k+1;
int count=1;
while(pListHead){
if (count==n) break;
pListHead=pListHead->next;
count++;
}
return pListHead;*/
//方法2:只需遍历一遍链表
ListNode *p1=pListHead;
ListNode *p2=pListHead;
for (int i=0;i<k-1;i++){
p1=p1->next;
if (!p1) return nullptr;
}
while(p1->next){
p2=p2->next;
p1=p1->next;
}
return p2;
}
};