单链表空检查

时间:2015-01-18 13:17:38

标签: java singly-linked-list is-empty

我为单链表创建了这个Node类:

 class Node{
   int item; 
   Node next;
   Node(int v){
     item = v;
     next = null; 
   }
 }



我想在一个名为findmax的方法中搜索具有最高键的节点。但是我想检查列表是否为空,如果是,则返回null ,否则返回具有最高密钥的节点。这就是我所做的:

Node findmax(Node h){
  if(h==null)
    return null;
  else{
  //search 
  }

我想知道的是,如果检查列表是否为空,我是否正确。

1 个答案:

答案 0 :(得分:0)

是的,如果符合以下条件,您所做的检查是正确的:

Node n = null;// init empty list

n = new Node(3);// first item

但是,我建议你创建一个独立于list连接的item结构。这就是我的意思:

Node类:

public class Node
{
    int value;

    public Node(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

list结构:

public interface IList
{
    public int getNodeNumbers();
}

public class EmptyList implements IList
{
    @Override public int getNodeNumbers() {
        return 0;
    }
}

public class ConsList implements IList
{
    private Node node;

    private IList next;

    public ConsList(Node node, IList next) {
        this.node = node;
        this.next = next;
    }

    @Override public int getNodeNumbers() {
        return 1 + next.getNodeNumbers();
    }
}

如何使用它:

public class Main
{
    public static void main(String[] args) {
        IList list1 = new ConsList(new Node(1),
            new ConsList(new Node(2),
            new ConsList(new Node(3),
            new ConsList(new Node(4),
            new EmptyList()))));

        IList list2 = new EmptyList();

        System.out.println(list1.getNodeNumbers() + " - " + list2.getNodeNumbers());
    }
}

现在,当isEmpty()返回0时,列表为空(您可以在IList接口中创建自己的方法getNodeNumbers()