题目描述
输入一个链表,输出该链表中倒数第k个结点。
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if (k < 0) return null; // 异常判断
ListNode slow;
ListNode fast;
slow = fast = head;
int i = k;
for (; i > 0 && fast != null; i--) {
fast = fast.next;
}
if (i > 0)
return null; // 当k大于链表长度的时候,也要返回null
while (fast != null) {
slow = slow.next;
fast = fast.next;
}
return slow;
}
}
分析:
设置两个指针,slow和fast,首先slow和fast这两个指针都指向head,然后fast先前走K步,这样slow和fast之间就间隔K个结点,最后fast和slow同时向前移动,直至fast走到链表的尾部。当fast走到链表的尾部时,slow指针所指的结点就是链表的倒数第K个结点。