I think you want to declare your Node
class like:
class Node<T extends Comparable<T>> {
T value;
Node next;
Node(T value) {
this.value = value;
}
}
Then your Stack
would look like:
class Stack<T extends Comparable<T> {
Node<T> Top;
Node<T> Min;
void push(T value) {
Node<T> node = new Node<T>(value);
if(Top == null) {
Min = node;
} else {
Min = Min.value.compareTo(node.value) < 0 ? Min : node;
}
node.next = Top;
Top = node;
}
}
UPDATE
I think what you are actually asking for is something like:
class Node<T> {
T value;
Node next;
Node(T value) {
this.value = value;
}
}
class Stack<T> {
Node<T> Top;
Node<T> Min;
final Comparator<T> valueComparer;
public Stack(Comparator<T> valueComparer) { this.valueComparer = valueComparer; }
void push(T value) {
Node<T> node = new Node<T>(value);
if(Top == null) {
Min = node;
} else {
Min = valueComparer.compare(Min.value, node.value) < 0 ? Min : node;
}
node.next = Top;
Top = node;
}
}
This means your value class does not need to implement Comparable
, as long as the class constructing the Stack
object knows how to compare the values by passing in a Comparator
.