单链表输出倒数第k个元素
简单粗暴直接思路:遍历两次,第一次遍历整个列表确定长度n,而倒数第k个即第n-k-1(注意起点为0)个,第二次遍历走n-k-1步即可获得答案。缺点:节点数量较多时,节点从硬盘到物理内存的读写是一个耗时操作。
巧妙的方法:定义两个指针,我们都知道倒数第k个距离最后一个的距离是k-1,所以可以先移动一个指针走k步后,然后两个指针同时移动,那么在快的指针到达结尾时,慢的指针到达的位置正好是倒数第k个。
//如何找出单链表中的倒数第k个元素
class Node{
Node next=null;
int data;
public Node(int data){
this.data=data;
}
}
public class findKelem {
public static Node method(Node head,int k) {
if(k<0) {
return null;
}
Node p1=head;
Node p2=head;
for(int i=0;i<k&&p1!=null;++i) {
p1=p1.next;
}
// if(p1==null) {不注释掉这一部分在输出顺数第一个数据时会报数组越界
// System.out.print("p1 is null!");
// return null;
// }
while(p1!=null) {
p1=p1.next;
p2=p2.next;
}
if(p2 == null)
System.ou