在Java中的链接列表中递归替换字符串

时间:2017-12-04 20:26:01

标签: java recursion replace linked-list

尝试创建一个方法,用所选替换字符串替换链表中字符串的所有实例。

然而,我所得到的似乎只是检查第三个参数选择的节点,而不会重复列表。

public void replace(String firstItem, String replaceItem, Node n){
    if (n != null) {
        if (n.getItem().equals(firstItem)) {
            n.setItem(replaceItem);
            n = n.next();
        }
    }
}

以下是主要应用:

public class ListApp {

    public static void main(String[] args){
        Node n4 = new Node("green", null);
        Node n3 = new Node("red", n4);
        Node n2 = new Node("red", n3);
        Node n1 = new Node("red", n2);

        LinkedList list = new LinkedList(n1);

        System.out.println(list);

        list.replace("red", "RED", n1); // CALLING THE METHOD

        System.out.println(list);

    }
}

然而输出结果如下:

RED, red, red, green

不确定我需要做什么才能检查每个节点。

如果需要,节点库:

package lib;

public class Node {
    private String item;
    private Node nextItem;

    public Node(String str, Node n){
        item = str;
        nextItem = n;
    }
    public String getItem(){
        return item;
    }
    public void setItem(String str){
        item = str;
    }
    public Node next(){
        return nextItem;
    }
    public void setNext(Node n){
        nextItem = n;
    }
}

非常感谢任何信息,谢谢!

2 个答案:

答案 0 :(得分:1)

您的代码存在的问题是,您没有以递归方式调用该函数。

此外,您可能希望每次都获取下一个节点,而不仅仅是在更换项目时。

因此,您的代码应如下所示:

public void replace(String firstItem, String replaceItem, Node n){
    if (n != null) {
        if (n.getItem().equals(firstItem)) {
            n.setItem(replaceItem);
        }
        replace (firstItem, replaceItem, n.next());
    }
}

答案 1 :(得分:0)

你几乎拥有它:

public void replace(String firstItem, String replaceItem, Node n){
    if (n != null) {
        if (n.getItem().equals(firstItem)) {
            n.setItem(replaceItem);
            n = n.next();
        }
        replace(firstItem, replaceItem, n); //Recursive call here
    }
}