链表中倒数第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;
}