Я пытаюсь написать функцию delete(), которая берет связанный список и удаляет элемент Kth из списка. Мой код ниже.Как удалить первый элемент в связанном списке?
public void delete(int k){
Node current = head;
for (int i = 0; i < k; i++){
if(current == null || current.next == null){ //check if list is empty or k is out of bounds
throw new IndexOutOfBoundsException();
}
else
{
current = current.next; // Move pointer to k position
}
}
remove(current.item);
N--;
}
public void remove(E e) {
if (e == null)
throw new NullPointerException();
// (*) special case (2/one node with e)
if (head != null && head.item.equals(e)) {
head = null;
N--;
}
else { // (*) general case (3) -- this also covers the case for empty list
Node temp;
// Step 1: bring temp to one node before the node with e.
for (temp = head; temp != null && !temp.next.item.equals(e);
temp = temp.next) {} // empty body
// Step 2: if temp is still in the list, then remove
if (temp != null) {
temp.next = temp.next.next;
--N;
}
}
}
Пока мой код работает, как ожидалось, когда я запускаю команду, как lst1.delete(1)
или lst1.delete(2)
в основном. Однако, когда я запускаю lst1.delete(0)
, он удаляет весь связанный список. Я не могу понять, почему lst1.delete(0)
удаляет весь связанный список, но я думаю, что это имеет какое-то отношение к for-loop. Цикл for - петли вверх, пока не будет меньше k. Если я пройду в 0, то, возможно, он удалит точку входа главы, которая удаляет весь список?
Мой вопрос: может ли кто-нибудь рассказать мне, как я могу изменить свой код, чтобы при запуске lst1.delete(0)
он просто удалял первый элемент в связанном списке, а не весь связанный список?
Когда вы запустите lst1.delete (1), как долго находится оставшийся список? Думаю, только один элемент? Если это так, то удаление всего из головы приведет к удалению всего списка. – brianestey
Обновлено, чтобы показать, что происходит в 'remove'. @brianestey, когда я запускаю lst1.delete (1), он удаляет элемент в позиции 1 в связанном списке. Остальные предметы остаются. Таким образом, количество оставшихся элементов в связанном списке просто уменьшается на единицу. –
'head = null' выглядит подозрительно. Это не просто, если есть один элемент, это если вы удаляете первый элемент. – brianestey