Я учусь манипулировать узлами, и у меня проблема с одним из моих тестовых примеров, и, похоже, мой код не удаляет правильные узлы. Код должен удалять узлы, содержащие символы нижнего регистра, но когда тестовый пример ожидает E
, я получаю l
. Может ли кто-то просмотреть мой код и тестовый пример и объяснить, что не так. Я не могу использовать статические переменные, массивы или коллекции Java.код удаления неправильных узлов
мой код
public class ListUppercaseExample {
public static Node<Character> uppercase(Node<Character> head) {
if (head == null) {
return null;
}
Node<Character> prev = head;
Node<Character> start = head;
while (head != null) {
if (Character.isLowerCase(head.value)) {
if (Character.isLowerCase(start.value)) {
start = head.next;
prev = head.next;
head = head.next;
} else {
if(head.next == null){
return start;
}
else{
prev.next = head.next;
head = head.next;
}
}
} else {
head = head.next;
}
}
return start;
}
}
мой класс узел
public final class Node<T> {
public final T value;
public Node<T> next;
public Node(T _value) {
this(_value, null);
}
public Node(T _value, Node<T> _next) {
value = _value;
next = _next;
}
@Override
public String toString() {
return "" + value;
}
}
тест
@Test
public void testDrEvil() {
@SuppressWarnings("unchecked")
Node<Character>[] nodes = new Node[] {
new Node<Character>('d'), // 0
new Node<Character>('R'), // 1
new Node<Character>('E'), // 2
new Node<Character>('v'), // 3
new Node<Character>('I'), // 4
new Node<Character>('l', null)
};
for (int i = 0; i < nodes.length-1; i++) {
nodes[ i ].next = nodes[ i+1 ];
}
// expected: D -> R
Node<Character> actual = ListUppercaseExample.uppercase(nodes[0]);
Node<Character> now = actual;
assertEquals("", nodes[1], now); // R
assertEquals("", nodes[2], now.next); // E
now = now.next;
assertEquals("", nodes[4], now.next); // I
now = now.next;
assertEquals("", null, now.next);
}