面试金典题2.2
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
输入: 1->2->3->4->5 和 k = 2 输出: 4
本题的思路其实很简单,总共n个数,找倒数第k个数,其实就是找第n-k个数。主要的问题是这个题放在链表里面该如何解决。关于链表的题,其中最常用的方法就是双指针。定义两个指针,都指向头结点,让其中一个指针先移动k次,然后让两个指针同时开始移动,直到先移动的那个指针指向空,则后移动的指针便刚好指向倒数第k个结点。
leetcode代码
/**
* 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 *p=head;
ListNode *q=head;
while(k--){
q=q->next;
}
while(q!=nullptr){
p=p->next;
q=q->next;
}
return p->val;
}
};