Вопрос требует, чтобы я написал метод для моего класса LList, он добавит новый узел в правильную позицию, предполагая, что список уже отсортирован. Список, с которым я имею дело, - это очередь.Нужна помощь по Связанному списку sortedInsert
Вот мой 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 указывает на себя, но для меня мой код этого не делает. Так может кто-нибудь сказать мне, что случилось? Спасибо.
Так tmp.getPrev(). GetNext() не даст мне оригинальный LNode, где tmp установлено равным? –
забыл позвонить вам ... @Matthew –
С моей точки зрения, я бы сказал, нет. Когда вы сначала создаете «newnode», он вообще не привязан к LinkedList, просто вроде сидит один в памяти сам по себе. Как только вы обнаружите, где должен быть вставлен новый узел с именем «newnode», вы правильно упорядочите все указатели. Что-то по строкам newnode.setPrev (tmp); newnode.setNext (tmp.getNext()); tmp.setNext (newnode); newnode.getNext() setPrev (newnode). – Matthew