Метод поиска и удаления связанного списка Java

У меня есть проект для класса информатики, и у меня есть все, кроме одного метода. Метод удаления. В основном я делаю связанный список из пользовательского ввода, и мне нужно иметь возможность удалить все узлы (что сделано) и удалить один указанный узел. Поэтому мне нужно поискать в списке узлов найти тот, который нужно удалить, и удалить его. Все, что может помочь, ценится. Если у вас есть решение, предложите объяснение, поскольку я пытаюсь изучить и просто решить проблему.

Я не собираюсь давать вам графический интерфейс, потому что я неНе думаю, что это необходимо, но вот класс узла.

public class MagazineList {
private MagazineNode list;

    public MagazineList(){
        list = null;
    }


public void add(Magazine mag){
    MagazineNode node = new MagazineNode(mag);
    MagazineNode current;

    if(list == null) {
        list = node;
    }
    else {
        current = list;
        while(current.next != null)
            current = current.next;
        current.next = node;
    }   
}
public void insert(Magazine mag) {
  MagazineNode node = new MagazineNode (mag);

  // make the new first node point to the current root
  node.next=list;

  // update the root to the new first node
  list=node;
}

public void deleteAll() {
    if(list == null) {

    }

    else {
        list = null;
    }
}
public void delete(Magazine mag) {
    //Delete Method Goes Here
}

public String toString(){
    String result = " ";

    MagazineNode current = list;
    while (current != null){
        result += current.magazine + "\n";
        current = current.next;     
    }
    return result;
}
private class MagazineNode {
    public Magazine magazine;
    public MagazineNode next;


    public MagazineNode(Magazine mag){
        magazine = mag;
        next = null;
    }
}
}

ОБНОВИТЬ

Вот метод, который я собрал, и он проходит первую часть цикла while и никогда не распознает один и тот же элемент в списке. Я использовал ту же самую вещь для методов ввода и удаления, но она не распознает это. Любая помощь приветствуется.

public void delete (Magazine mag) {
MagazineNode current = list;
MagazineNode before;

before = current;

if(current.equals(mag)){
    before.next = current;
    System.out.println("Hello");
}

while ((current = current.next)!= null){
    before = current.next;
    System.out.println("Hello Red");

    if(current.equals(mag)){
        current = before;
        System.out.println("Hello Blue");
    }
}
 }

Ответы на вопрос(3)

Ваш ответ на вопрос