在双向链表Java中删除具有最小值的通用类型节点

时间:2019-03-19 17:48:48

标签: java doubly-linked-list

这是我的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循环中并可以比较最小值?

2 个答案:

答案 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();
}