输入一个链表,输出该链表中倒数第k个结点。
方法1:遍历两次链表
第一次记录链表的长度为num
第二次遍历到num-k,即为倒数第k个结点
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null)
return null;
if(k==0)
return null;
int num=0;
ListNode temp=head;
while(temp!=null){
num++;
temp=temp.next;
}
if(k>num){
return null;
}
temp=head;
for(int i=1;i<=num-k;i++){
temp=temp.next;
}
return temp;
}
}
方法二:用两个指针遍历
第一个指针先走k个结点
当两个指针结束后,第二个指针指向即为倒数第k个结点
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null)
return null;
if(k==0)
return null;
ListNode pre=head,tail=head;
while(k>0){
if(pre==null){
return null;
}else{
pre=pre.next;
k--;
}
}
while(pre!=null){
pre=pre.next;
tail=tail.next;
}
return tail;
}
}