Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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,这个问题希望我为我的LList类编写一个方法,它将在正确的位置添加一个新节点,假设列表已经按排序顺序排列。我正在处理的列表是一个队列 这是我的LNode类: class LNode{ private int val; private LNode next; private LNode prev; public LNode(int v, LNode n, LNode p){ next = n; prev = p; va

这个问题希望我为我的LList类编写一个方法,它将在正确的位置添加一个新节点,假设列表已经按排序顺序排列。我正在处理的列表是一个队列

这是我的LNode类:

class LNode{
    private int val;
    private LNode next;
    private LNode prev;
    public LNode(int v, LNode n, LNode p){
        next = n;
        prev = p;
        val = v;
    }
    public int getVal(){
        return val;
    }
    public LNode getNext(){
        return next;
    }
    public LNode getPrev(){
        return prev;
    }
    public void setVal(int v){
        val = v;
    }
    public void setNext(LNode n){
        next = n;
    }
    public void setPrev(LNode p){
        prev = p;
    }
}
这是我最喜欢的课程:

public class LTest{
    public static void main(String[]args){
        LList nums = new LList();
        nums.enqueue(55);
        nums.enqueue(20);
        nums.enqueue(13);
        nums.enqueue(11);
        nums.sortedInsert(15);


        nums.display();
    }
}
以下是我在LList课程中尝试的内容:

public void sortedInsert(int v){
    LNode tmp = head;
    while(v<tmp.getVal()){
        tmp = tmp.getNext();
    }
    tmp.setNext(tmp.getPrev().getNext());//tmp's next is now the original LNode
    tmp.getPrev().getNext().setPrev(tmp);//the original LNode's previous is now tmp
    tmp.getPrev().setNext(tmp);//tmp's previous LNode's next is now tmp
    tmp.setVal(v);
}
public void sortedInsert(int v){
LNode tmp=头部;

虽然(v从我第一次查看您的代码来看,似乎您实际上没有在sortedInsert方法中为新值v创建一个新节点。我认为您需要创建一个新节点,然后通过LinkedList进行创建,然后附加新节点,而不必担心设置数据的值,因为它将被捕获到新节点中.有点像这样也许

LNode newnode = new LNode();
newnode.setVal(v);

LNode tmp = head;

while(v < head.getVal())
{
   //etc...
}
LNode newnode=new LNode();
newnode.setVal(v);
LNode tmp=头部;
而(v

不要忘记,如果新节点位于开始位置,则需要将head变量更改为指向新节点。

So tmp.getPrev().getNext()不会给我tmp设置为等于的原始LNode吗?忘了给你打电话了…@Matthew根据我的理解,我会说不。当你第一次创建“newnode”时,它根本没有连接到LinkedList,只是一种独自坐在内存中的方式。一旦你找到名为“newnode”的新节点应该插入的位置,你就可以重新启动正确地设置所有指针。与newnode.setPrev(tmp);newnode.setNext(tmp.getNext());tmp.setNext(newnode);newnode.getNext().setPrev(newnode)行一致;