Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在节点索引之间插入新节点_Java - Fatal编程技术网

Java 如何在节点索引之间插入新节点

Java 如何在节点索引之间插入新节点,java,Java,我第一次用Java做面向对象编程项目 下面是我的一些工作 问题:我无法在特定索引中添加新节点。在我的linkedlist类中,我从头部循环打印节点列表,结果如下:,但我无法在它们之间放置新节点。例如,粉红色的新节点如何在蓝色节点之前添加 有什么帮助或建议吗 ListApp public class ListApp { public static void main(String[] args){ Node n4 = new Node("green", null);

我第一次用Java做面向对象编程项目 下面是我的一些工作 问题:我无法在特定索引中添加新节点。在我的linkedlist类中,我从头部循环打印节点列表,结果如下:,但我无法在它们之间放置新节点。例如,粉红色的新节点如何在蓝色节点之前添加 有什么帮助或建议吗

ListApp

public class ListApp {

    public static void main(String[] args){

        Node n4 = new Node("green", null);
        Node n3 = new Node("orange", n4);
        Node n2 = new Node("blue", n3);
        Node n1 = new Node("red", n2);

        LinkedList list = new LinkedList(n1);
        System.out.println(list.getHead().getItem());

        System.out.println("\n" );

        list.deleteBefore(n2);
        System.out.println(list);       

    }
}
节点类

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;
    }
}
链接列表类

public class LinkedList {
    private Node head;

    public LinkedList(Node h){
        head = h;
    }
    public Node getHead(){
        return head;
    }
    public void setHead(Node n){
        head = n;
    }

    public void insertAfter(Node newNode, Node prev){
        newNode.setNext(prev.next());
        prev.setNext(newNode);
    }

    public void deleteAfter(Node prev){
        if ( prev.next() != null ){
        prev.setNext(prev.next().next());
        }   
        else prev.setNext(prev.next()); //BECAUSE THERE IS NOTHING TO PRINT OUT.
    }

    public void changeNextItem(Node n, String str){
        if (n.next() != null)
        n.next().setItem(str);
    }

    public void replaceAfter( Node newNode, Node Prev){
        newNode.setNext(Prev.next());
        Prev.setNext(newNode);
    }

    public void changeAll(String colour){
        Node current = head;
        while (current != null){
            current.setItem("white");
            current = current.next();
        }
    }

    public String toString(){
        String str = "";
        Node current = head;
        while(current != null){
            str = str + current.getItem();
            current = current.next();
            if (current != null){
                str = str + ", ";
            }
        }
        return str;
    }
}

据我所知,听起来好像您正试图在某个现有节点之后将一个新节点插入LinkedList的中间。你的LinkedList类有一个insertAfter方法,看起来是正确的。尝试从main()调用该方法。例如,如果要在节点n3之后添加一个包含字符串“粉色”的新节点,可以编写以下代码:

list.insertAfter(new Node("pink", null), n3);
如果要在给定的现有节点之前添加节点,可以在LinkedList中编写一个与insertAfter非常类似的方法,只是需要在节点类中添加对上一个节点的引用,或者在insertBefore()方法中循环查找上一个节点。大概是这样的:

public void insertBefore(Node newNode, Node existingNode){
    Node current = head;
    Node prev = null;
    while(current != null){
        if(current.getItem().equals(existingNode.getItem())){
            prev.setNext(newNode);
            newNode.setNext(current);
            break;
        } else{
            prev = current;
            current = current.next();
        }
    }
}

很不清楚你的问题是什么。请使用正确的语法,准确地告诉我们您正在尝试做什么,以及您遇到了什么问题。很抱歉,实际上我无法在特定索引中添加新节点。在我的linkedlist类中,我从头部循环打印节点列表,结果如下:,但我无法在它们之间放置新节点。例如,我可以在蓝色节点之前添加粉红色的新节点,以便于澄清。你能把它添加到问题本身中,这样每个人都能更容易地看到它吗?它是完美的:我怎样才能在给定的节点之前添加新的节点或者怎样才能在给定的节点之前删除以前的索引例如:这段代码在给定后成功添加粉红色。以同样的方式删除n3之前的粉红色节点。到目前为止,您所提供的一切对我来说都是非常好的。deletebefore public void deletBefore(Node newNode,Node before){if(before!=null){Node current=head;Node prev=null;System.out.println(“-------------------------------------”);而(current!=before){prev=current;System.out.println(prev.getItem());System.out.println(current.next().getItem());current=current.next();}System.out.println(“-------------------------------------”);newNode.setNext(before);prev.setNext(newNode);}}我不确定上一条注释中的代码是什么。但是我已经编辑了我的答案,添加了一种实现insertBefore()方法的方法。这完全回答了你的问题吗?