Удалить метод для связанного списка.Метод вставки является нетрадиционным и выполняется в тета (1) раз - PullRequest
0 голосов
/ 22 февраля 2019

Привет всем, поэтому у меня есть связанный список, и я должен сделать метод удаления, который работает правильно.Например, если я вызываю 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();
    }
}

}

1 Ответ

0 голосов
/ 22 февраля 2019

Я понял это.Простое - 1 нужно было добавить.

MyNode current = head;
if (index == numberElements ** - 1 **) {
     head = head.getNext();       // I have seen this in other examples to delete the head node. However It does not work for mine. 
}
...