题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路
首先确定,若一共有n个节点,链表中倒数第K个节点的指针为n-k+1。我们要实现的是遍历一次链表就能找到这个结点,这种情况下可以定义两个指针,两个指针开始都指向首结点,然后第一个指针向前走k-1步到达k结点,此时两个指针相距k-1,当第一个指针走到链表的尾结点n时,第二个指针的刚好走到n-(k-1),即(n-k+1)结点。
还要考虑边界情况,首结点为空,k小于等于0,和链表长度小于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 ahead = head;
for (int i = 1; i < k ; i++){
if (ahead.next != null)
ahead = ahead.next;
else
return null;
}
ListNode last = head;
while (ahead.next != null){
ahead = ahead.next;
last = last.next;
}
return last;
}
}