В настоящее время я работаю над внедрением метода AddAtIndex и, по большей части, он работает нормально. Однако мой метод не передает мой тест JUnit, и я не могу понять, почему. Таким образом, я решил показать код я сделал до сих пор:Внедрение метода AddAtIndex в LinkedList
**
* Add an element to the list at the specified index
* @param The index where the element should be added
* @param element The element to add
*/
public void add(int index, E element) //Method should be O(1) time.
{
// TODO: Implement this method
if (index < 0) {
System.out.println("Can't add an element at a negative index.");
}
int i = 0;
LLNode<E> currentNode = head.next;
while (i < size) {
if (i == index) {
LLNode<E> newNode = new LLNode<E>(element);
LLNode<E> tempNode = new LLNode<E>(currentNode.data);
currentNode.next = tempNode;
currentNode.data = newNode.data;
newNode.prev = currentNode.prev;
newNode.next = tempNode;
tempNode.prev = newNode;
size++;
}
currentNode = currentNode.next;
i++;
}
}
Мой мыслительный процесс позади кода является то, что метод создает новый узел, то он заменяет данные по указанному индексу связанного списка , Однако данные в узле, который он заменяет, хранятся во временном узле, который после нового узла увеличивается на следующий узел. Я около 80% уверен в моей реализации, хотя код выглядит немного неряшливо. Я создал драйвер для демонстрации реализации. Код драйвера заключается в следующем:
public class LinkedListDriver {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyLinkedList<String> nameList = new MyLinkedList<String>();
nameList.add("Hamadi");
nameList.add("Ballo");
nameList.add(1, "Salisu");
nameList.add(2, "Galo");
System.out.println(nameList.toString());
System.out.println(nameList.size());
nameList.set(2, "Abdullahi");
System.out.println(nameList.toString());
nameList.remove(1);
System.out.println(nameList.toString());
MyLinkedList<Integer> list1 = new MyLinkedList<Integer>();
list1.add(65);
list1.add(21);
list1.add(42);
System.out.println(list1.toString());
list1.remove(0);
System.out.println(list1.toString());
}
}
Выход из драйвера следующим образом:
List: Hamadi, Salisu, Galo, Ballo,
4
Replacing Galo with Abdullahi
List: Hamadi, Salisu, Abdullahi, Ballo,
Removing Salisu from the list
List: Hamadi, Abdullahi, Ballo,
List: 65, 21, 42,
Removing 65 from the list
List: 21, 42,
тест
устройства не однако со следующей ошибкой:
Он терпит неудачу в методе AssertEquals :
shortList.add(2, "E");
shortList.add(3, "F");
**assertEquals("AddAtIndex: at position 2 ", "E", shortList.get(2)); //fails here**
assertEquals("AddAtIndex: at position 3 ", "F", shortList.get(3));
assertEquals("AddAtIndex: List size is ", 6, shortList.size());
Я хотел бы знать, что я делаю неправильно. У меня это буквально полностью выяснено, хотя я знаю, что кое-что немного о моем методе AddAtindex. Благодаря!
использовать отладчик и посмотреть, как указатели движутся –
Из начального выхода, я бы сказал, что метод добавить в основном работает. Я не уверен, что вы делаете метод, чтобы вернуть вам плохую ценность, но –
Вы также должны узнать о 'for'-loops:' for (int i = 0; i