Напишите метод pu sh для динамического c связанного списка стека java - PullRequest
0 голосов
/ 09 июля 2020

У меня небольшие проблемы при попытке написать метод, который, по сути, вставляет в стек динамической c. Я не совсем уверен, как это написать, поэтому мне было интересно, есть ли у кого-нибудь указатели или советы о том, как двигаться дальше с этим.

Вот часть класса

public class StackOfVersionedObjects {

private Node<VersionedObject> latest;
private String                key;

public StackOfVersionedObjects(String key, final Object object) {
    this.key = key;
    VersionedObject vrObject = new VersionedObject(object);
    latest = new Node<VersionedObject>(vrObject);
}

public boolean isEmpty() {
    return latest == null;
}

// TODO: create a new version of the given object by pushing it to the top of the stack;
//  the new versioned object should have the version of the latest object plus one;
//  if the stack is empty, this method should throw an EmptyStackException
public void put(final Object object) throws EmptyStackException {

    if (isEmpty())
        throw new EmptyStackException();

    Object tempObj = new Node();
    Node tempNode = new Node();

    latest.getNext(tempNode);
    latest.setNext(temp); // I think??

    // NO THIS DOESN'T WORK

} ...}

Вот мой объект и класс узла, если это необходимо

Класс объекта:

public class VersionedObject {

private Object object;
private int    version;
private static final int FIRST_VERSION = 0;

public VersionedObject(final Object object, int version)  {
    this.object = object;
    if (version < FIRST_VERSION)
        this.version = FIRST_VERSION;
    else
        this.version = version;
}

public VersionedObject(final Object value) {
    this(value, FIRST_VERSION);
}

public Object getObject() {
    return object;
}

public int getVersion() {
    return version;
}

@Override
public String toString() {
    return "VersionedObject{" +
            "object=" + object +
            ", version=" + version +
            '}';
}

}

Класс узла:

public class Node<T> {

private T    data;
private Node next;

public Node() {
    data = null;
    next = null;
}

public Node(T data) {
    this.data = data;
    next      = null;
}

public T getData() {
    return data;
}

public Node<T> getNext() {
    return next;
}

public void setData(T data) {
    this.data = data;
}

public void setNext(Node<T> next) {
    this.next = next;
}

@Override
public String toString() {
    return data.toString();
}

}

1 Ответ

0 голосов
/ 09 июля 2020

Обновите свой метод put следующим образом:

if (isEmpty())
    throw new EmptyStackException();
int newVersion = latest.getData().getVersion() + 1;
VersionedObject vrObject = new VersionedObject(object,newVersion);
Node<VersionedObject> toAdd = new Node<>(vrObject);
toAdd.setNext(latest);
latest = toAdd;
...