理解
方法一:找到链表的长度,然后遍历length-k次,就找到了倒数第k个结点。要考虑如果k大于链表长度的情况下,返回的是null。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
int length=0;
for(ListNode cur=head;cur!=null;cur=cur.next){
length++;
}
if(length<k)
return null;
ListNode r=head;
for(int i=0;i<length-k;i++){
r=r.next;
}
return r;
}
}
方法二:两个引用都指向头结点,先让second遍历k次,如果它为空,返回null,然后让first,second同时往后遍历,直到second为null结束,此时first指向的就是倒数第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) {
ListNode first=head;
ListNode second=head;
for(int i=0;i<k;i++){
if(second==null)
return null;
second=second.next;
}
while(second!=null){
first=first.next;
second=second.next;
}
return first;
}
}