题目:输入一个链表,输出该链表中倒数第k个结点。
思路:定义一快一慢两个指针,快的指针先走到 k-1 的位置,然后从第 k 个位置开始,两个指针同时走,当快的指针走到最后一个位置的时候,慢指针所在的位置就是倒数第 k-1 的位置。
测试用例:
1. 功能测试:第k个节点位于链表的中间;第k个节点是链表的第一个节点;第k个节点是链表的最后一个节点。
2. 负面测试:输入的链表头结点为空;链表的节点总数少于k。
public class test_twenty_two {
public ListNode findKthToTail(ListNode head, int k){
if(head == null || k<=0)return null;
ListNode slow = head;
ListNode fast = head;
while(k-- > 1){
if(fast!=null){
fast = fast.next;
}
else return null;
}
while(fast.next!=null){
slow = slow.next;
fast = fast.next;
}
return slow;
}
}