这道题用双指针即可,倒数第k个,其实就是正数n-k+1个。先让快指针走k步,然后slow从head出发,跟fast一步一步走,当fast走到尾(空节点)时,slow的位置正在n-k+1。
但是还得注意一些极值情况,比如链表为空或者k大于链表节点时。
上代码:
public ListNode FindKthToTail (ListNode pHead, int k) {
//处理链表为空的情况
if(pHead == null)
return null;
ListNode fast = pHead;
ListNode slow = pHead;
//可能会有k大于链表节点的情况,所以多加个fast != null的判断
while(fast != null && k-- > 0){
fast = fast.next;
}
if(k > 0){
return null;
}
while(fast != null){
fast = fast.next;
slow = slow.next;
}
return slow;
}
京公网安备 11010502036488号