解题思路
运用双指针进行解题,设置两个快慢指针p,q,快指针先走k个位置,之后慢指针再走,这样当快指针到达链表末尾时,慢指针刚好指向倒数第k个位置得到元素,返回即可
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
ListNode fast,slow; //设置快慢指针
fast = head;
slow = head;
while(k > 0) //快指针先走k个位置
{
fast = fast.next;
k--;
}
while(fast != null) //快慢指针一起走
{
fast = fast.next;
slow = slow.next;
}
return slow;
}
}
总结
这是一道典型的快慢指针的运用问题,需要注意的点主要是快指针到达末尾后才跳出循环而不是快指针的next到末尾