GC удаляет объект по выходу из метода

Рейтинг: 0Ответов: 0Опубликовано: 20.01.2023

Пытаюсь реализовать стек на основе односвязного списка и сталкиваюсь с проблемой: по выходу из метода push() вновь созданный узел удаляется из памяти несмотря на то, что на него ссылается head.

public class Stack<T> {
private class Node<T> {
    public T value;
    public Node<T> pref;

    public Node(T v, Node<T> n) {
        value = v;
        pref = n;
    }
}

private Node<T> head;
private int size;

public void push(T value) {
    Node<T> newNode = new Node<>(value, head);
    head = newNode;
    size++;
}

public void pop() {
    if(isEmpty()) {
        throw new NullPointerException("Remove from empty stack");
    }
    head = head.pref;
    size--;
}

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

public int size() {
    return size;
}

@Override
public String toString() {
    if(isEmpty()) {
        return "EMPTY";
    } else {
        String res = "";
        while(true) {
            res += head.value.toString();
            pop();
            if(isEmpty()) {
                break;
            }
            res += " -> ";
        }
        return res;
    }
}

public Stack<T> reverse() {
    Stack<T> reverseStack = new Stack<>();
    while(!isEmpty()) {
        reverseStack.push(head.value);
        pop();
    }
    return reverseStack;
}

}

Ответы

Ответов пока нет.