Пытаюсь найти лучший способ выполнить "TODO's" для моего метода добавления. нужно обработать особый случай, когда мы добавляем в начало списка (index = 0), и нужно обработать особый случай, когда список пуст и index = 0

Вот метод:

 public void add(int index, T item) throws IllegalArgumentException {

    if (index < 0 || index > size) {
        throw new IllegalArgumentException();

    } else {

        // TODO need to handle the special case where we are adding 
        // to the beginning of the list (index = 0)

        // TODO need to handle the special case where the list is empty 
        // and index = 0

        int counter = 0;

        Node<T> current = head;
        while (counter < index-1) {
            counter++;
            current = current.next;
        }

        Node<T> newNode = new Node(item);
        newNode.next = current.next;
        current.next = newNode;

        size++;
       }
   }
-3
Progamminnoob 26 Июн 2016 в 01:25
И .... что вы пробовали до сих пор? С чем у вас проблемы?
 – 
Jim Garrison
26 Июн 2016 в 01:33

1 ответ

Лучший ответ

Для случая 0:

if (index == 0) {
    Node<t> newNode = new Node(item);
    newNode.next = head
    head = newNode
    return;
}

Он будет работать одинаково хорошо, если список пуст (я предполагаю, что head равен нулю), поэтому вам не нужен дополнительный оператор if для проверки этого.

Я предлагаю вам прочитать это и < href = "http://www.tutorialspoint.com/data_structures_algorithms/" rel = "nofollow noreferrer"> этот учебник .

Кроме того, вам не нужен оператор else после первого if. Если выбрано исключение, никакой код после этого выполняться не будет. Итак, для ясности, вместо того, чтобы писать:

void someMethod() {
    if (condition) {
        throw new Exception();
    }
    else {
        // rest of the function here
    }
}

Вы можете просто написать:

void someMethod() {
    if (condition) 
        throw new Exception();

    // rest of the function here, no redundant indentation
}

Рассмотрите возможность возврата объекта this из метода. Это позволит вам выполнить цепочку методов. Я не знаю, как называется ваш класс, поэтому в моем примере я назову его MyList.

public MyList<T> add(int index, T item) {
    // method implementation
    return this;
}

А затем использование вместо:

MyList<Integer> myList = new MyList<>();
myList.add(0, 1);
myList.add(0, 2);
myList.add(0, 3);

Вы сможете написать с тем же результатом:

MyList<Integer> myList = new MyList<>();
myList.add(0, 1)
      .add(0, 2)
      .add(0, 3);
0
Community 23 Май 2017 в 13:29