OJ链接:链表中倒数第k个结点
题目描述
- 输入一个链表,输出该链表中倒数第k个结点。
解题思路
- 题目中的链表是单链表,不能从后往前进行。
- 可以定义两个指针,一个指针先走k步,再让另一个指针跟在后面,使用“前后指针”的方式,当前面的指针到达结尾,后面的指针,也就是倒数第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==nullptr)
return nullptr;
//我们可以约定首个节点是第1个节点
ListNode* front=pListHead;//前面的节点
ListNode* rear=pListHead;//后面的节点
while(k>0 && front)
{
k--;
front=front->next;
}
while(front)
{
front=front->next;
rear=rear->next;
}
return k>0 ? nullptr:rear;//走到这里,front一定是nullptr
}
};