题目:输入一个链表,输出该链表中倒数第k个结点。
思路:刚看到这个题目,想的是,不能从链尾进行查询第k个数嘛,后来查询资料,链表只能从头到尾进行查询。所以要用另一种方法:在链表头部定义两个指针,让其中一个指针指向第k个节点,也就是走k-1步,然后两个指针同时向后走,直到第一个指针到了链尾,也就是说next=null了,就找到了。但是要注意三种情况:链表为空;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 pre = head;
ListNode lat = head;
for(int i = 1;i < k; i++){
if(pre.next != null) //判断k值是否超过了链表的长度
pre = pre.next;
else
return null;
}
while(pre.next != null){
pre = pre.next;
lat = lat.next;
}
return lat;
}
}