【问题标题】:Need help on Linked list sortedInsert在链表 sortedInsert 上需要帮助
【发布时间】:2013-03-07 02:43:37
【问题描述】:

问题要我为我的 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 指向它自己,但对我来说,我的代码并没有这样做。那么谁能告诉我怎么了?谢谢。

【问题讨论】:

    标签: java


    【解决方案1】:

    从我第一次看你的代码看,你似乎并没有在 sortedInsert 方法中为新值 v 创建一个新节点。我认为您将需要创建一个新节点,然后遍历您的 LinkedList 然后附加新节点,而不必真正担心设置数据的值,因为它将在新节点中捕获。大概是这样的……

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

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

    【讨论】:

    • 所以 tmp.getPrev().getNext() 不会给我原始的 LNode,其中 tmp 设置为等于?
    • 忘记给你打电话了...@Matthew
    • 据我了解,我会说不。当您第一次创建“newnode”时,它根本没有附加到 LinkedList,只是独自坐在内存中。一旦找到应该插入名为“newnode”的新节点,然后正确地重新排列所有指针。类似于 newnode.setPrev(tmp); newnode.setNext(tmp.getNext()); tmp.setNext(newnode); newnode.getNext().setPrev(newnode);
    猜你喜欢
    • 2013-02-12
    • 1970-01-01
    • 2011-07-10
    • 2011-06-23
    • 2014-11-04
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多