题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
链表结点定义如下:
class ListNode{
int key;
ListNode next;
public ListNode(int key){
this.key=key;
}
}
public class LastK {
public ListNode getLastK(ListNode head,int k){
if(k<0) {
System.err.println("k<0");
return null;
}
ListNode p=head;
ListNode pk=head;
for(;k>0;k--){//pk走了k步
if(pk.next!=null)
pk=pk.next;
else {
return null;
}
}
while(pk.next!=null){//pk再走n-k步,p也走n-k,则p为倒数第k个结点
p=p.next;
pk=pk.next;
}
return p;
}
public static void main(String[] args) {
int k=2;
ListNode head=new ListNode(0);
ListNode[] p=new ListNode[6];
for (int i = 0; i < p.length; i++) {
p[i]=new ListNode(i+1);
if(i>0)
p[i-1].next=p[i];
else {
head.next=p[0];
}
}
LastK l=new LastK();
ListNode r=l.getLastK(head, k);
System.out.println(r.key);
}
}
链表0-1-2-3-4-5-6
k=2
结果:4