Привет всем, поэтому у меня есть связанный список, и я должен сделать метод удаления, который работает правильно.Например, если я вызываю remove (0), он должен удалить первое, что было введено в список, и так далее, и так далее.Это немного отличается от большинства связанных списков, потому что обычно головной узел находится на 0-м месте, однако в этом случае заголовок находится в конце списка.Таким образом, мой код пока работает довольно хорошо, однако я не могу удалить головной узел или последний элемент в моем списке.Также, если мой список содержит только один элемент, его также невозможно удалить.Мой код работает для всех остальных случаев. Я рассмотрел примеры удаления головного узла, но в моем случае он не работает.Если кто-нибудь может мне помочь, это будет очень ценно!
public class MyLinkedList {
private MyNode head;
private int numberElements;
public MyLinkedList() {
numberElements = 0;
head = null;
}
// runtime = \Theta(1)
// if you don't care about ordering
// every time something is inserted it becomes the head node
public void insert(MyCircle m) {
MyNode temp = new MyNode();
temp.setData(m);
temp.setNext(head);
head = temp;
numberElements++;
}
// runtime = \Theta(n)
public void remove(int index) {
if (index >= numberElements || index < 0) {
throw new RuntimeException("Index too big or too small!");
}
MyNode current = head;
if (index == numberElements) {
head = head.getNext(); // I have seen this in other examples to delete the head node. However It does not work for mine.
}
int length = numberElements - index - 2;
for (int i = 0; i < length; i++) {
current = current.getNext();
}
if (index != 0 && index != numberElements) {
current.setNext(current.getNext().getNext());
} else if (index == 0) {
current.setNext(null);
}
numberElements--;
}
// runtime = \Theta(n)
public void print() {
// loop through the list until getNext is null
MyNode current = head;
while (current != null) {
System.out.println(current.getData());
current = current.getNext();
}
}
}