长颈鹿Giraffe

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Implement an algorithm to find the kth to last element of a singly linked list.

实现一个算法寻找链表中倒数第K个数..

 

解答:

关于链表的问题,书中也提到了关键的两个技巧,一个是递归;另一个是 The"Runner"Technique,也就是使用两个指针同时遍历链表的方式。这道题可以分别用这两种方法来解决。

import java.util.HashMap;

public class List {
    int data;
    List next;

    public List(int d) {
        this.data = d;
        this.next = null;
    }

    public void appendToTail(int d) {
        List end = new List(d);
        List n = this;
        while (n.next != null) {
            n = n.next;
        }
        n.next = end;
    }

    public void print() {
        List n = this;
        System.out.print("{");
        while (n != null) {
            if (n.next != null)
                System.out.print(n.data + ", ");
            else
                System.out.println(n.data + "}");
            n = n.next;
        }
    }

    public int nthToLast(int n) {
        if (this.next == null) {
            if (n == 0)
                System.out.println(this.data);
            return 0;
        }
        int i = this.next.nthToLast(n) + 1;
        if (i == n)
            System.out.println(this.data);
        return i;
    }

    public void nthToLast1(int n) {
        List m = this;
        List pt = this;
        for (int i = 0; i < n; i++){
            if(pt.next == null)
                return ;
            pt = pt.next;
        }
        while(pt.next != null)
        {
            m = m.next;
            pt = pt.next;
        }
        System.out.println(m.data);
    }

    public static void main(String args[]) {
        List list = new List(0);
        list.appendToTail(1);
        list.appendToTail(2);
        list.appendToTail(3);
        list.appendToTail(4);
        list.appendToTail(5);
        list.appendToTail(6);
        list.appendToTail(7);
        list.appendToTail(8);
        list.appendToTail(9);
        list.print();
        list.nthToLast(10);
        list.nthToLast1(10);
    }
}

 

posted on 2013-07-24 11:07  长颈鹿Giraffe  阅读(307)  评论(0编辑  收藏  举报