如何返回符号表中的第二个最小键

时间:2016-04-08 23:07:19

标签: java linked-list

如何返回链表中的第二个最小键?我浏览过,并没有看到真正帮助我的讨论。

public class LinkedListST<Key extends Comparable<Key>, Value> {
    private Node first;      // the linked list of key-value pairs

    // a helper linked list data type
    private class Node {
        private Key key;
        private Value val;
        private Node next;

    public Node(Key key, Value val, Node next)  {
        this.key  = key;
        this.val  = val;
        this.next = next;
    }
}

public Key secondMinKey () {
    if(first == null) return null;
    Node secondMin;

    return null; // TODO
}

这是我到目前为止的伪代码,但我需要帮助将其转换为代码。我是否初始化了min和secondMin节点?

编辑:这是我到目前为止所拥有的

public Key secondMinKey () {
  if(first == null) return null;
    Node secondMin;
    for (Node x = first.next.next; x != null; x = x.next) {
        if (need to update min) update min and second min
        else if (need to update second min) update second min
    }
    return second min;
}

1 个答案:

答案 0 :(得分:1)

要查找链表中的第二个最小元素,我可以想到一个体面的解决方案。算法有点像这样。

有2个“指针”。将两者初始化为Key的最大可能值。

firstPtr = secondPtr = Key.MAX_VALUE;

使用以下条件解析链表

  1. 如果当前Node.Key小于firstPtr,请将firstPtrsecondPtr同时更新为当前Node.Key
  2. 否则,如果当前Node.Key小于secondPtr,则更新secondPtr
  3. 如果您遇到编码问题,请与我们联系。