Обход и замена двусвязного списка значений Char с использованием listIterator - PullRequest
0 голосов
/ 28 сентября 2018

Мне нужно пройти по двусвязному списку символов.Мне нужно заменить каждое капитальное «Y» в моем списке на «!»и после обратного хода замените каждое 'M' на '' в том же созданном итераторе списка.Если вам нужно больше контекста к вопросу, я добавлю больше, но пока это краткое объяснение.

Мой код пока:

public static void main(String[] args)
{
    KWLinkedList<Character> list = new KWLinkedList<Character>() ;
    String linkString = "ZekqmDXJGfaos3MPaSl8p1La.9rXEt43a=Cn#Ds72Y";

    for(int i = 0;  i < linkString.length();i++)
    {
        list.add(linkString.charAt(i));
    }

    ListIterator myIterator = list.listIterator(0) ;

    int i = 0;
    while(!myIterator.hasNext())
    {


        myIterator.next();
        if(myIterator.equals('Y'))
        {
            list.set(list.get(i), 'Y' );
            i = list.get(0);
        }
        if(myIterator.equals('M'))
        {
            list.set(list.get(i - 1), ' ');

        }
        i++;
    }

    System.out.println(list.toString()); // just to see what comes out

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

В сочетании ваша попытка с решением Андреаса

public static void main(String[] args) {
    LinkedList<Character> list = new LinkedList<>();
    String linkString = "ZekqmDXJGfaos3MPaSl8p1La.9rXEt43a=Cn#Ds72Y";

    for (int i = 0; i < linkString.length(); i++) {
        list.add(linkString.charAt(i));
    }

    ListIterator<Character> myIterator = list.listIterator(0);

    while (myIterator.hasNext()) {
        char c =  myIterator.next();
        if (c == 'Y') {
            myIterator.set('!');
        }
    }
    while (myIterator.hasPrevious()) {
        char c = myIterator.previous();
        if (c == 'M') {
            myIterator.set(' ');
        }
    }

    System.out.println(list.toString()); // just to see what comes out
}

вывод выглядит следующим образом
[Z, e, k, q, m, D, X, J, G, f, a, o,s, 3,, P, a, S, l, 8, p, 1, L, a,., 9, r, X, E, t, 4, 3, a, =, C, n, #, D, с, 7, 2,!]

0 голосов
/ 28 сентября 2018

Чтобы использовать ListIterator для перемещения вперед и замены некоторых элементов, используя метод set():

ListIterator<Character> iter = list.listIterator();
while (iter.hasNext()) {
    char c = iter.next(); // gets next value and auto-unboxes the Character to a char
    if (c == 'A')         // primitives are compared using `==`
        iter.set('B');    // auto-boxes the char literal to a Character and replaces the value
}

На этом этапеИтератор находится в конце списка, поэтому вы можете использовать его для перемещения назад:

while (iter.hasPrevious()) {
    char c = iter.previous(); // gets previous value, ie. moves backwards
    if (c == 'C')
        iter.set('D');
}
...