实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
示例:
输入: 1->2->3->4->5 和 k = 2
输出: 4
说明:
给定的 k 保证是有效的。
扫描o(n)
两个指针,一个指针一直移动,直到距离等于k后两个指针才一起移动,直到快指针为空此时慢指针指向的val就是答案
C++ 代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
int kthToLast(ListNode* head, int k) {
ListNode *cur = head,*p = cur;
int cnt = 0;
while(cnt < k)
{
p = p->next;
cnt++;
}
while(p)
{
cur = cur->next;
p = p->next;
}
return cur->val;
}
};