1
這個問題想讓我爲我的LList類編寫一個方法,它會將一個新節點添加到正確的位置,假定列表已經按排序順序。我正在處理的列表是一個隊列。在鏈接列表上需要幫助sortedInsert
這裏是我的葉子節點類:
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指向自己,但對我來說我的代碼並沒有這樣做。那麼誰能告訴我什麼是錯的?謝謝。
那麼tmp.getPrev()。getNext()不會給我原來的LNode,其中tmp被設置爲等於? – 2013-03-07 03:06:02
忘了打電話給你...... @Matthew – 2013-03-07 03:06:44
從我的理解,我會說不。當你第一次創建'newnode'時,它根本不會附加到LinkedList上,只是單獨坐在內存中。一旦找到應該插入新節點'newnode'的位置,您就可以正確重新排列所有指針。一些沿着newnode.setPrev(tmp)的行; newnode.setNext(tmp.getNext()); tmp.setNext(newnode); newnode.getNext()setPrev(newnode)。 – Matthew 2013-03-07 03:35:34