这是我的getSmallest()方法的代码:
exports.handler = function(context, event, callback) {
let twiml = new Twilio.twiml.VoiceResponse();
twiml.say('No input, will hangup the call now.');
twiml.hangup();
callback(null, twiml);
};
每个节点都有一个名为dataItem的字符串和一个与之关联的名为value的整数。我想查看哪个节点的值最小,然后返回dataItem。问题是我陷入了while循环中,不知道为什么。 如何正确遍历列表,以免卡在while循环中并可以比较最小值?
答案 0 :(得分:0)
如您所见,您无法在Java中重载运算符,并且>
仅适用于数字数据类型。
对此的通用解决方案是使用T extends Comparable<T>
并使用其compareTo
方法:
DLNode<T> current = front;
DLNode<T> minNode = current;
T minimum = current.getValue();
while (current.getNext() != null) {
if (minimum.compareTo(current.getValue()) > 0) {
minNode = current;
minimum = current.getValue();
}
current = current.getNext();
}
return current.getData();
(或者,如果T
不是Comparable
,则可以提供自定义Comparator
并以类似的方式使用它)。
答案 1 :(得分:0)
问题是:为什么循环终止条件从未达到?
作为双向链接列表,您的列表是否将最后一个元素连接到第一个元素? getNext()
会回答null吗?
此外,在编写的循环中还存在问题。请参阅下面的更正代码。此更新可能无法解决循环终止的问题。
public T getSmallest() throws EmptyListException {
if ( isEmpty() ) {
throw new EmptyListException("List is empty");
}
DLNode<T> currentNode = front;
int minValue = currentNode.getValue();
DLNode<T> minNode = currentNode;
while ( (currentNode = currentNode.getNext()) != null ) {
int nextValue = currentNode.getValue();
if ( nextValue < minValue ) {
minNode = currentNode;
minValue = nextValue;
}
}
return minNode.getData();
}