链接列表的编码约定

时间:2014-10-15 14:15:53

标签: java data-structures linked-list

我一直在 Java 中实施this面试问题。一个相当简单的问题,附加 大小

  

从链接列表末尾找到第N个节点,其中链接列表的大小未知?

我并不关心这个问题的解决方案,因为我已经想到了这个问题。

相反,我想知道我的实现是否维护了编码器在编写与链接列表及其实现相关的问题时所维护的编码约定?。这是我对上述问题的实现:< / p>

import java.io.*;
class NthNodeFromEnd<AnyType>
{
    private Node<AnyType> head;
    private Node<AnyType> pointer;
    private class Node<AnyType>
    {
        protected AnyType item;
        protected Node<AnyType> next;
    }
    void push(AnyType item)
    {
        if(isEmpty())
        {
            head = new Node<AnyType>();
            head.item = item;
            head.next = null;
            pointer = head;
        }
        else
        {
            Node<AnyType> newNode = new Node<AnyType>();
            newNode.item = item;
            newNode.next = null;
            pointer.next = newNode;
            pointer = pointer.next;
        }
    }
    boolean isEmpty()
    {
        return head == null;
    }
    AnyType printNthLastNode(int n)
    {
        Node<AnyType> ptr1 = head;
        Node<AnyType> ptr2 = head;
        for(int i =0;i<n;i++)
        {
            ptr1 = ptr1.next;
        }
        while(ptr1!=null)
        {
            ptr1 = ptr1.next;
            ptr2 = ptr2.next;
        }
        return ptr2.item;
    }
    public static void main(String args[])
    {
        NthNodeFromEnd<Integer> obj = new NthNodeFromEnd<Integer>();
        obj.push(1);
        obj.push(2);
        obj.push(3);
        obj.push(4);
        obj.push(5);
        obj.push(6);
        obj.push(7);
        System.out.println("The nth item is = "+obj.printNthLastNode(5));
    }
}

P.S。 - 我知道Java中有一个内置的Linked List实现,但我不希望使用它。我想知道这个实现是否正确问题是否足够好或是否有更好的方法来解决与链接列表相关的问题?

1 个答案:

答案 0 :(得分:1)

关于代码约定:

  • 泛型类型通常定义为单个大写字母:E或T,但不是AnyType,看起来像具体类型。
  • 运算符应该用空格,分号后面跟一个空格等包围。例如,for(int i =0;i<n;i++)应该是for (int i = 0; i < n; i++)
  • 方法printNthLastNode()应该打印第n个最后一个节点,而不是返回它。返回它的方法应命名为getNthLastNode()findNthLastNode()。顺便说一句,这种方法不会返回节点,而是存储在列表中的
  • 方法通常不应该是包私有的。它们通常应该是公共的或私人的。
  • Java中通常的惯例是在行的末尾打开花括号,而不是在下一行的开头。
  • 如果列表为空或不够大,您的方法printNthLastNode()将失败并显示NPE。应该使用更好的异常类型来表示这个问题。
  • 该类不应导入java.io.*,因为它不使用java.io中的任何类。通常不应导入包。课程应该。
  • String[] argsString args[]更具可读性,更为传统。
  • Node类应该是静态的:它不使用其封闭类型的任何实例成员。

也就是说,面试官应该看到,通过发布的代码,您可以了解链接列表的工作方式以及指针的工作方式以及泛型类型。