搜索自定义是更好的方法



因此,我有两个方法的实现,该方法搜索自定义链表,将name作为输入,如果找到名称,则获取与name关联的mark或返回-1

public int getMark (String name) {
    Node p = head;
    while ((p != null) && !(p.getName().equals(name)){
        p = p.getNext();
    }
    if (p == null){
      return - 1;
    }
    else
    {
      return p.getMark();
    }
}

public int getMark(String name){
    Node p = head;
    if(head == null)
    {
      return -1;
      break;
    }
    while(p != null)
    {
        if(p.getName().equals(name)
        {
            return p.getMark();
        }
        else
        {
            return -1;
        }
        p = p.getNext();
    }
}

他们都可以,但我想知道哪个解决方案更好。我个人认为第一种解决方案令人困惑,而且逻辑上不合理。

你的第一个代码似乎不是更好,如果你的任何节点可能是空的,那么它将返回-1,而不是进一步检查,

你的第二个逻辑也有点复杂,它应该像下面这样可以更好地执行。

 public int getMark(String name){
    Node p = head;
    if(head == null)
    {
      return -1;
    }
    while(p != null)
    {
        if(p.getName().equals(name)
        {
            return p.getMark();
        }
        p = p.getNext();
    }
    return -1;
}

你的第二个版本将无法工作,除非头部包含正确的一个和第一个版本似乎有点太多。看看这个:它更快,(在我看来)更可读

public int getMark (String name) {
    Node p = head;
    //Check if head is the correct one
    if (name.equals(p.getName())){
        return p.getMark();
    }
    while (hasNext(p)){
        p = p.getNext();
        if (name.equals(p.getName())){
            return p.getMark();
        }
    }
    //Ending up here means we didn't find it
    return -1;
 }
private boolean hasNext(Node p){
    return p.getNext() != null;
}

请注意,我假设head和'name'不是null,否则这当然不会工作

这将是我的方法,因为它简洁易读(在我看来)。基本上是第一个实现的变体。如果头部为空,可以返回-1。

public int getMark(String name) {
    Node p = head;
    while (p != null && !p.getName().equals(name)) {
        p = p.next;
    }
    return p != null ? p.getMark() : -1;
}

相关内容

  • 没有找到相关文章

最新更新