搜索自定义链表 - 哪种方法更好?

时间:2016-11-09 09:51:28

标签: java linked-list

所以我有一个方法的两个实现,它使用html, body { padding: 0; margin: 0; } .wrapper { min-height: 100vh; display: flex; } .content { background: grey; display: flex; flex-direction: column; }作为输入搜索自定义链接列表,如果找到名称,则获取与<div class="wrapper"> <div class="content"> <div> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> <div> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> <div> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> </div> </div>关联的name或返回{ {1}}。

mark

OR

name

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

3 个答案:

答案 0 :(得分:1)

您的第一个代码看起来似乎不是更好,因为您的任何节点可能为null然后它将返回-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;
}

答案 1 :(得分:0)

除非头部包含正确的版本且第一个版本看起来有点太多,否则您的第二个版本将无法正常工作。看看这个:它更快,(在我看来)更具可读性

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和&#39;姓名&#39;不是空的,否则这当然不会起作用

答案 2 :(得分:0)

这将是我的方法,因为它简洁易读(在我看来)。几乎是您第一次实施的变体。可以说,如果头为空,你可以返回-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;
}