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

来源:互联网 发布:ubuntu ssh 默认端口 编辑:程序博客网 时间:2024/05/21 10:53
题目:输入一个单向链表,输出该链表中倒数第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