剑指Offer之——链表中倒数第K个节点
解题思路:解题思路:设连链表的长度为N,并定义两个指针p1,p2分别指向链表的头节点,首先p1向后移动K个节点,则剩下N-K个节点,然后指针p1和指针p2同时向后移动,直到节点p1为null,则p1一共移动了N个节点,指针p2一共移动了N-(N-K)=K个节点;返回节点p2。
![](https://i.imgur.com/nGLiDIu.png)
代码
/**
* 解题思路:设连链表的长度为N,并定义两个指针p1,p2分别指向链表的
* 头节点,首先p1向后移动K个节点,则剩下N-K个节点,然后指针p1和指针
* p2同时向后移动,直到节点p1为null。则p1一共移动了N个节点,指针p2
* 一共移动了N-(N-K)=K个节点;返回节点p2.
* @param head 链表头节点
* @param k 倒数第K个
* @return 倒数第k个节点
*/
public ListNode FindKthToTail(ListNode head,int k) {
if (head==null){
return null;
}
ListNode p1,p2;
p1 = p2 = head;
while (p1!=null&&k-->0){
p1 = p1.next;
}
if (k>0){
return null;
}
while (p1!=null){
p1 = p1.next;
p2 = p2.next;
}
return p2;
}