在Linked list sortedInsert上需要帮助

时间:2013-03-07 02:43:37

标签: 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;
        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;
    }
}

这是我的LTest课程:

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);
}

它不起作用,输出是55,20,然后是15永远和java崩溃。我猜这是因为tmp LNode指向自己,但对我来说,我的代码并没有这样做。所以有人能告诉我什么是错的吗?谢谢。

1 个答案:

答案 0 :(得分:2)

从我第一次看你的代码看起来好像你实际上没有为sortedInsert方法中的新值v创建一个新节点。我认为您需要创建一个新节点,然后迭代通过您的LinkedList然后附加新节点,而不是真的担心设置数据的值,因为它将在新节点中捕获。有点像这样的事情......

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

LNode tmp = head;

while(v < head.getVal())
{
   //etc...
}

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