题目描述
输入一个链表,输出该链表中倒数第k个结点。
主要思想是使用两个指针,只需要一轮遍历就可以找出。
但是要注意一些特殊情况,保证代码的健壮性。
#include <iostream>
#include <vector>
using namespace std;
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<1||pListHead==NULL) {
return NULL;
}
int count=1;
ListNode* temp=pListHead;
ListNode* pKthToTail=NULL;
while(count<k&&temp!=NULL) {
temp=temp->next;
count++;
}
if(temp==NULL) {
return NULL;
}
pKthToTail=pListHead;
while(temp->next!=NULL) {
temp=temp->next;
pKthToTail=pKthToTail->next;
}
return pKthToTail;
}
};
int main() {
Solution sol;
ListNode *test=new ListNode(2);
test->next=new ListNode(1);
ListNode *res=sol.FindKthToTail(test,2);
cout<<res->val<<endl;
system("pause");
return 0;
}