剑指offer(十四)——链表中倒数第k个结点
题目描述
输入一个链表,输出该链表中倒数第k个结点。
题解
public static ListNode FindKthToTail(ListNode head,int k) {
ListNode postNode = null;
ListNode preNode = null;
if (k <= 0) {
return postNode;
}else {
int flag = 0;
postNode = head;
preNode = head;
while(preNode != null) {
if (++flag > k) {
postNode = postNode.next;
}
preNode = preNode.next;
}
return k <= flag ? postNode : null;
}
讲一下思路,就是设两个指针–前指针preNode和后指针postNode指向头结点head,前指针先移动,后指针等到前指针移动了k个结点后才开始移动,那么前指针遍历完整个链表时,后指针指向的便是倒数第k个结点。
注意k值大于整个链表长度的情况!
下面以k=2为例。
当pre指针到第2结点,post指针开始移动
当pre指针到到达终点时,post指针即为倒数第二个结点