一:题目描述
输入一个链表,输出该链表中倒数第k个结点。
二:问题分析
典型的双指针问题,需要特别注意的有两点:
1)哑节点dummy的设置,防止一些特殊情况的出现
2)在进行双指针运动之前先测量数组长度,如果小于k,直接返回null
三:问题求解
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
//哑节点设置
ListNode dummy=new ListNode(-1);
dummy.next=head;
//对链表长度进行测量
ListNode ruler=dummy;
int length=0;
while(ruler.next!=null){
ruler=ruler.next;
length++;
}
if(length<k){
return null;
}
ListNode fast=dummy;
ListNode slow=dummy;
for(int i=0;i<k;i++){
fast=fast.next;
}
while(fast!=null){
fast=fast.next;
slow=slow.next;
}
return slow;
}
}