如何返回链表中的第二个最小键?我浏览过,并没有看到真正帮助我的讨论。
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;
}
答案 0 :(得分:1)
要查找链表中的第二个最小元素,我可以想到一个体面的解决方案。算法有点像这样。
有2个“指针”。将两者初始化为Key
的最大可能值。
firstPtr = secondPtr = Key.MAX_VALUE;
使用以下条件解析链表
Node.Key
小于firstPtr
,请将firstPtr
和secondPtr
同时更新为当前Node.Key
。Node.Key
小于secondPtr
,则更新secondPtr
。如果您遇到编码问题,请与我们联系。