链表中倒数第k个节点(Java)

时间:2023-03-09 22:54:37
链表中倒数第k个节点(Java)
链表中倒数第k个节点
  

  题目描述

  输入一个链表,输出该链表中倒数第k个结点。
  思路:two-pointers思想,因为是单链表,没法得prevous点,直接遍历得到链表长度再重新遍历效率很低。
    采用双指针思想,使得当一个指针处于链表末尾时,另一个指针恰好在倒数第k个节点。
    
     public ListNode FindKthToTail(ListNode head, int k) {
if(head==null||k==0)
return null;
ListNode tmp = head;
ListNode res = head;
//用来计数,得到链表的长度,后续判断k值是否超过了链表长度
int i=1;
while(tmp.next!=null){
//最终tmp在链表最后一个节点,当tmp的节点位置i>=k时,res开始右移
if(i>=k)
res = res.next;
tmp = tmp.next;
i++;
}
if(i<k)
return null;
else
return res;
}