实现一种算法,找出单向链表中倒数第 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;}
};