题目描述
输入一个链表,输出该链表中倒数第k个结点。
解题思路
在一个单链表中找到倒数第k个节点,很容易想到先遍历一次链表节点个数n,第二次遍历只需要找第n-k+1个节点。
但如果要求只允许遍历一次链表呢?
使用两个指针,移动过程中两个所在位置始终相差k-1的距离。当前一个指针移到尾部时,后一个指针正好指向倒数第k个结点。
代码实现
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null||k<=0)
return null;
ListNode headA=head;
ListNode headB=null;
for(int i=0;i<k-1;i++){
if(headA.next!=null){
headA=headA.next;
}else{
return null;
}
}
//让两个指针始终保持k-1个节点位,等前面的节点到尾结点,后一个节点到达倒数第k个节点
headB=head;
while(headA.next!=null){
headA=headA.next;
headB=headB.next;
}
return headB;
}
}