这个问题要我为我的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指向自己,但对我来说,我的代码并没有这样做。所以有人能告诉我什么是错的吗?谢谢。
答案 0 :(得分:2)
从我第一次看你的代码看起来好像你实际上没有为sortedInsert方法中的新值v创建一个新节点。我认为您需要创建一个新节点,然后迭代通过您的LinkedList然后附加新节点,而不是真的担心设置数据的值,因为它将在新节点中捕获。有点像这样的事情......
LNode newnode = new LNode();
newnode.setVal(v);
LNode tmp = head;
while(v < head.getVal())
{
//etc...
}
不要忘记,如果新节点位于开头,则需要将head变量更改为指向newnode。