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;
}
Ответы (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;
}
