求单项链表的倒数第k个节点(只遍历一次)
单向链表求倒数第k个节点我们可以先遍历一遍找出链表的长度,再设置一个指针走(n-k)步可以找到倒数第k个节点。
但是,这需要遍历两次,如果只允许遍历一次我们就可以使用双指针。设置一个先指针和一个后指针,两个指针都指向头节点,先指针先向前走k步,之后两个指针一起向前移动,直到先指针遍历出最后一个节点值为null时,后指针指向的就是倒数第k个节点。
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
ListNode former = head, latter = head;
//首先先让先节点向前走k位。
for(int i = 0; i < k; i++){
former = former.next;
}
//先,后节点同步向前遍历,直到先节点=null,返回后节点的值就是倒数第k个点。
while(former != null) {
former = former.next;
latter = latter.next;
}
return latter;
}
}