题目描述:
输入一个链表,输出该链表中倒数第k个结点。
分析:最直接、最先想到的方法肯定是先求出链表长度,然后让链表从开始向后走(k-1)个结点。但是这种方法会遍历链表两遍,下面我说的这种方法只需遍历一遍就能找出对应结点。
定义两个结点fast和slow。让fast先向后走(k-1)个结点,然后slow和fast同时向后走,直到fast走到头,slow对应的结点即为所求结点,这个过程画图更直观明了:
注意:还要判断k的合法性 和 链表长度是否比k大的情况,具体细节看下面所示代码:
public ListNode FindKthToTail(ListNode head,int k) {
ListNode fast = head;