Java 使用listIterator遍历和替换字符值的双链接列表

Java 使用listIterator遍历和替换字符值的双链接列表,java,data-structures,doubly-linked-list,Java,Data Structures,Doubly Linked List,我需要遍历一个双链接的字符列表。我需要用一个“!”替换列表中的每个大写字母“Y”然后,向后遍历,在创建的同一列表迭代器中用“”替换每个“M”。如果你需要更多的上下文来回答这个问题,我会补充更多,但现在这不是很长的解释 到目前为止我的代码: public static void main(String[] args) { KWLinkedList<Character> list = new KWLinkedList<Character>() ; String

我需要遍历一个双链接的字符列表。我需要用一个“!”替换列表中的每个大写字母“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
publicstaticvoidmain(字符串[]args)
{
KWLinkedList=新建KWLinkedList();
String linkString=“ZekqmDXJGfaos3MPaSl8p1La.9rXEt43a=Cn#Ds72Y”;
对于(int i=0;i
要使用a向前遍历并替换某些项目,请使用以下方法:


将您的尝试与Andreas解决方案相结合

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
}
publicstaticvoidmain(字符串[]args){
LinkedList=新建LinkedList();
String linkString=“ZekqmDXJGfaos3MPaSl8p1La.9rXEt43a=Cn#Ds72Y”;
对于(int i=0;i
输出如下所示

[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、s、7、2、!]那么您面临的问题是什么呢?
KWLinkedList是一个常见的
LinkedList
链接列表吗?
myIterator.equals('Y'))
将列表迭代器本身与迭代器指向的元素进行比较Character@Maxim我的迭代器不起作用。每次都会被跳过。@Ivan好的,所以我只需要比较列表项,然后你只向前遍历。根据ta,你需要第二次
,而
向后遍历以替换
M
sk description不要使用原始的
列表迭代器。这也消除了强制转换的需要。
while (iter.hasPrevious()) {
    char c = iter.previous(); // gets previous value, ie. moves backwards
    if (c == 'C')
        iter.set('D');
}
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
}