题目描述:
输入一个链表,输出该链表中倒数第k个结点。
思路解析:
第一种方法:先遍历链表,计算链表的长度,然后再从前向后到第n-k+1个就可以了。但是这种方法的缺陷是需要遍历两次链表。
第二种方法:用两个指针,都初始化为头节点,然后第一个指针先走k-1步,然后两个一起走,当第一个走到最后的时候,第二个刚好是倒数第k个节点,返回就可以了。
注意:代码的鲁棒性:判定链表是否是空,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 Anode=head;
ListNode Bnode=head;
for(int i=0;i<k-1;i++){
if(Anode.next!=null){
Anode= Anode.next;
}
else
return null;
}
while(Anode.next!=null){
Anode = Anode.next;
Bnode = Bnode.next;
}
return Bnode;
}
}