设置2个指针:fast和slow都指向头结点,fast先移动k-1步,判断是否到达链表尾部,若到达,说明k不合法;然后fast和slow同时移动,循环直到先行的指针值为NULL值,另一个指针所指的位置就算要查找的位置
public class FindK {
public static void main(String[] args){
Node n1=new Node(5);
Node n2=new Node(3);
Node n3=new Node(9);
Node n4=new Node(2);
n1.next=n2;
n2.next=n3;
n3.next=n4;
Node n=new FindK().findK(n1,2);
System.out.println(n.data);
}
public Node findK(Node head,int k){
if(head==null||k<1)
return null;
Node p=head;
Node q=head;
for(int i=0;i<k-1&&p!=null;i++){//前移k-1步
p=p.next;
}
if(p==null) {
System.out.println("k不合法");
return null;
}
while(p.next!=null){//同时后移
p=p.next;
q=q.next;
}
return q;
}
}