题目
输入一个链表,输出该链表中倒数第k个结点。
注意:
k >= 0;
如果k大于链表长度,则返回 NULL;
样例
输入:链表:1->2->3->4->5 ,k=2
输出:4
解法:模拟
首先求出链表的长度,如果k大于链表长度,则返回 NUL
再从头(0)开始遍历到第n-k个结点即可
时间复杂度O(n),空间复杂度O(1)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* findKthToTail(ListNode* pListHead, int k) {
if (k == 0) return nullptr;
int len = 0;
auto p = pListHead;
while (p) {
p = p->next;
len++;
}
if (k > len) return nullptr;
p = pListHead;
k = len - k;
while (k--) {
p = p->next;
}
return p;
}
};