题目
输入一个链表,输出该链表中倒数第k个结点。
考察点
- 链表
- 代码的鲁棒性
解题思路
- 一开始想法:遍历下链表,然后从后往前回溯K个节点,输出即可。但因给定链表为单链表,其节点只有从前往后的指针,故该想法行不通。
- 输出倒数第K个节点,就是输出正数第N-K+1个,故先遍历一遍链表给出链表长度,再遍历到底n-k+1个节点,输出即可。
- 只遍历一次的方法:设置两个指针,phead先走K-1步,然后pbehind跟它同步走,当phead刚好走到尾结点时,pbehind刚好走到n-k+1节点(即倒数第k个节点)
完整代码
/*14-输出链表倒数第K个节点*/
#include<iostream>
using namespace std;
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
//遍历两次
ListNode* FindKthToTail01(ListNode* pListNode, unsigned int