您的位置:首页 > 职场人生

[java 面试100道]13.输入一个单向链表,输出该链表中倒数第k个结点。

2012-10-15 09:56 645 查看
题目:输入一个单向链表,输出该链表中倒数第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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐