当前位置: 首页 > 知识库问答 >
问题:

单链表空检查

郁权
2023-03-14

我已为单链表创建了此节点类:

 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个答案

韦高阳
2023-03-14

是的,您所做的检查是正确的,如果:

Node n = null;// init empty list

以及:

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

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

Node类:

public class Node
{
    int value;

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

    public int getValue() {
        return value;
    }
}

列表结构:

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());
    }
}

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

 类似资料:
  • 似乎人们总是说,如果一个单链接列表的头是空的,那么这个列表是空的,但是检查尾部也会起作用吗?假设我确实知道一个列表有一个尾部,我可以检查尾部是否为空以确定它是否为空吗?

  • 我一直试图利用我以前的单链表来创建双向链表。因此,在Node类中,我添加了以前的节点引用,并更新了类中的和方法,以适应在列表类中的来回。将新节点放在当前节点之后,并将新节点放在列表类中当前节点之前;这是因为我想在DoublyLinked中以升序添加和插入我的值列表类。[这可能听起来很混乱,但我会在下面发布代码]当我测试我的方法[在类]我得到一个空指针异常。 正如我所说,我已经为此工作了几天,所以在

  • 单向链表 结构体 struct   rt_slist_node   单向链表节点 更多...   宏定义 #define  rt_slist_entry(node, type, member)   rt_container_of(node, type, member)   获取单向链表节点的数据结构   #define  rt_slist_for_each(pos, head)   for (po

  • 问题内容: Web服务返回一个巨大的XML,我需要访问它的深层嵌套字段。例如: 问题是,,可能所有的回报。 但是,如果我在所有情况下都进行检查,则代码将变得非常冗长且难以阅读。此外,我可能会错过某些领域的检查。 可以写吗 或将其视为反模式? 问题答案: 捕获是一件非常有问题的事情,因为它们几乎可以在任何地方发生。从错误中获取一个错误,意外地捕获它,然后像一切正常一样继续进行非常容易,从而隐藏了一个

  • 如果你想创建一个像这样的单链表: 这个列表有方法“追加”、“删除”、“printList”和“findElement”。有必要有尾巴吗?因为使用“最后”你可以地址最后一个节点。 那么,什么时候有必要拥有所有三个节点“头”、“尾”和“最后”?例如,当您想将排序的节点插入列表时?

  • 我在做单链表实现,我记得Linus Torvalds在这里谈到过。 在单链表中,为了删除节点,我们应该可以访问上一个节点,然后更改它当前指向的节点。 因此,无论如何,我们都应该可以访问上一个节点。 但是Linus Torvalds通过在C中使用地址的概念删除了这个特例。因此head也有“前面的东西”,即指向head的head的地址。因此,他使用了C的指针和地址特性来删除特殊情况。 我认为这种单链表