Я начал свою основу для этого вопроса здесь, и мне сказали начать новую тему: Удалить элементы в связанном списке
Я закончил мой код ниже:
public class MyLinked {
static class Node {
public Node (double item, Node next) { this.item = item;
this.next = next; }
public double item;
public Node next;
}
int N;
Node first;
public void delete (int k) {
if (k < 0 || k >= N) throw new IllegalArgumentException ();
if (k == 0) {
Node temp = first;
first = first.next;
temp.next = null;
}else {
Node previous = first;
while (k < N -1) {
previous = previous.next;
k++;
}
Node current = previous.next;
previous.next = current.next;
current.next = null;
N--;
}
}
Я думаю, что я указываю на правильные узлы для удаления k-го элемента, однако вот что возвращает тест:
[ 11 21 31 41 ].delete( 0 ): Expected 4 nodes, but got less.
[ 11 21 31 41 ].delete( 1 ): expected=[ 11 31 41 ], actual=[ 11 21 31 ]
[ 11 21 31 41 ].delete( 3 ): expected=[ 11 21 31 ], actual=[ 11 31 41 ]
[ 11 21 31 41 51 ].delete( 0 ): Expected 5 nodes, but got less.
[ 11 21 31 41 51 ].delete( 1 ): expected=[ 11 31 41 51 ], actual=[ 11 21 31 41 ]
[ 11 21 31 41 51 ].delete( 2 ): expected=[ 11 21 41 51 ], actual=[ 11 21 31 51 ]
[ 11 21 31 41 51 ].delete( 3 ): expected=[ 11 21 31 51 ], actual=[ 11 21 41 51 ]
[ 11 21 31 41 51 ].delete( 4 ): expected=[ 11 21 31 41 ], actual=[ 11 31 41 51 ]
Я думаю, что ошибка в том, что когда он пытаетсяудалить [0], он удаляется в [1], когда [1] в [2].Я представляю, что он начинается с [1] вместо [0] как первый узел в списке?Любая помощь по настройке моего кода для правильного чтения очень ценится.
Вот тестовый код:
private static void testDelete (int k, String list, String expected) {
MyLinked actual = MyLinked.of (list);
String message = String.format ("[ %s ].delete( %d )", list,
k);
try {
actual.delete (k);
} catch (Throwable e) {
String exception = e.getClass ().getName ();
if (! exception.equals (expected)) {
e.printStackTrace (); // for debugging
showError (String.format ("%s: expected=%s,
actual=%s", message, expected, exception));
}
return;
}
check (message, actual, expected);
}