Как изменить элемент в связанном списке. Какой код входит в: void changeElem (String oldStr, String newStr) - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть класс драйвера с:

public static void main(String[] args)
   {
      SimpleLinkedList list = new SimpleLinkedList(null); // create empty list

      // add some elements in the list in reverse order so that list is sorted
      list.addElement("W");
      list.addElement("T");
      list.addElement("P");
      list.addElement("L");
      list.addElement("K");
      list.addElement("B");
      list.printList();      

      System.out.println("change W to X");
      list.changeElem("W", "X");

Я предполагаю создать новый метод с именем «changeElem» в другом классе, где void changeElem(String oldStr, String newStr), но я не уверен, как это сделать.

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

Ответ от manikanta правильный; однако, changeElement(List list, String string, String replacement) требует, чтобы вы передавали список в качестве параметра, что означает, что вы не можете использовать его в контексте list.changeElement("W", "X").

Я предполагаю, что SimpleLinkedList - это класс Java, который Вы реализовали.

Чтобы использовать метод как list.changeElement("W", "X") вместо changeElement(list, "W", "X"), вам нужно добавить метод changeElement в класс SimpleLinkedList (который, я думаю, на самом деле ваш вопрос).

Поскольку фактическая реализация класса неизвестна, что-то вроде этого:

public class SimpleLinkedList {

    public void add(String str) {
        //This should be an existing method, for example
    }

    //Assuming this is the implementation
    private class Node {
        String data;
        Node nextNode;
    }
    private Node firstNode; //Should be set/unset in your add/remove method

    //New method. To keep the order of your list, iterate and replace individually
    public void changeElement(String str, String replacement) {
        for(Node n = firstNode; n != null; n = n.nextNode) {
            if(str.equals(n.data)) {
                    n.data = replacement;
                    break; //If you want to replace only one instance
            }
        }
    }

}

Кроме того, если есть сомнения: посмотрите на исходный код Java. Что вы в основном хотите сделать, это find место, где находится str, а затем заменить его.

Это почти функция Java LinkedList indexOf(String str), за исключением того, что вместо возврата индекса, когда вы находите str, вы заменяете его. Реализация LinkedList Java indexOf ()

0 голосов
/ 07 апреля 2020

Предполагая, что ваш SimpleLinkedList реализует интерфейс List и имеет по крайней мере Java 8:

private static void changeElement(List<String> list, String string, String replacement){
        list.replaceAll(s -> s.equals(string) ? replacement : s);
}

Конечно, вы можете вызвать этот метод 'Util' из вашего SimpleLinkedList, передавая себя как первый аргумент.

0 голосов
/ 05 апреля 2020

Нам просто нужно добавить замещающую строку в нужном месте, а затем удалить нежелательную строку.

publi c stati c void main (String [] args) {

        /*
         * LinkedList list = new LinkedList(null); // create empty list
         */

          LinkedList listLinked = new LinkedList<String>();

      // add some elements in the list in reverse order so that list is sorted
          listLinked.add("W");
          listLinked.add("T");
          listLinked.add("P");
          listLinked.add("L");
          listLinked.add("K");
          listLinked.add("B");    


      changeElement(listLinked, "W", "X");

      System.out.println(listLinked);

      }


    private static void changeElement(List list, String string, String replacement) {

        if(list.contains(string))
        {
            // adding the replacement
            list.add(list.indexOf(string), replacement);

            // removing the unwanted
            list.remove(string);
        }
        else
        {
            System.out.println("Element not found to replace");
        }

  }
...