题目链接
思路分析
思路1
首先我们看到这道题目,第一种思路就是我们先遍历整个链表,得到链表长度,然后同理得到倒数第K个节点,然后从头部找到倒数第K个节点返回就可以得到结果
思路2
我们重点讲解思路2-- 这道题目与我们之前讲过的leetcode26. 删除有序数组中的重复项可以使用相同的方法,也是使用双指针,我们使用快慢指针,让快指针先走K步,然后快慢指针同时走,这样当快指针走到链表尾的时候,慢指针就是倒数第K个节点
解题代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* getKthFromEnd(ListNode* head, int k) {
ListNode* slow = head;
ListNode* fast = head;
while(k--)
{
fast = fast->next;
}
while(fast)
{
fast = fast->next;
slow = slow->next;
}
return slow;
}
};