Delete-elem (removeElem) в односвязном списке (java)

Нужно реализовать метод removeElem, который удаляет первый найденный указанный элемент в связанном списке и возвращает получившийся список.

Sample Input: 1 9 5 7

5

Sample Output: 1 9 7

Я написал код вроде бы нормально но не получается. Помогите плз

public static Node removeElem(Node node, int data) {
    // Написать решение сюда ↓
    Node head;
    head = node;
    
    Node cur = head;
    Node prev = head;
    
    while(cur.data != data){
        prev = cur;
        cur = cur.next;
        
        if (cur == head) {
            head = head.next;
        } else {
            prev.next = cur.next;
        }
    }
    return cur;
}

output неправильный


Ответы (1 шт):

Автор решения: Nowhere Man

Логика в представленном коде нарушена -- "удаляться" будут числа не равные заданному, поэтому нужно вынести оператор if из цикла, и проверять, было ли действительно найдено заданное число:

public Node removeElem(Node head, int data) {
    Node curr = head;
    Node prev = null;

    // пропускаем все элементы списка, не равные заданному значению
    while (curr != null && curr.data != data) {
        prev = curr;
        curr = curr.next;
    }
    if (curr != null) { // значение найдено!
        if (null == prev) { // в голове, то же что curr == head
            head = head.next;
        } else {
            prev.next = curr.next; // внутри списка
        }
    }
    
    return head;
}
→ Ссылка