解题思路
剑指 Offer 22.:链表中倒数第k个节点
该题关键在于找到链表中倒数第k个节点的位置,可以使用指针来锁定节点位置。
使用快慢指针,快指针与慢指针保持K个节点的距离,然后一同遍历到链表尾,那样快指针就到了原链表的尾部,快指针往前K-1个节点的位置就是新链表头节点的位置(即慢指针的下一个节点),所以,新链表的头部就是慢指针的下一个节点。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
//快慢指针
public static ListNode getKthFromEnd(ListNode head, int k) {
//快指针、慢指针,两指针保持K的距离,那样遍历到最后就可以找到新链表的头节点
ListNode fast = head , slow = head;
for(int i=0 ; i<k ; i++) {
fast = fast.next;
}
//如果k等于链表的长度就直接返回原链表
if(fast == null) return head;
while(fast.next !=null) {
fast = fast.next;
slow = slow.next;
}
return slow.next;
}
}