질문은 내 LList 클래스에 대한 메서드를 작성하기를 원합니다. 목록이 이미 정렬 된 순서로 있다고 가정하면 올바른 위치에 새 노드를 추가합니다. 내가 다루고있는 목록은 대기열입니다. ,연결된 목록에 대한 도움이 필요하십니까 sortedInsert
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);
}
그것은 작동하지 않습니다
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 클래스에서 시도한 작업은 다음과 같습니다
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 클래스의 :
여기 내 LNode 클래스의 출력은 55,20, 그리고 영원히 15이고 java는 충돌합니다. TMP LNode 자체를 가리키고 있기 때문에 그것은 내 생각에,하지만 내 코드는 그렇게하지 않습니다. 그럼 누가 잘못되었는지 말해 줄 수 있니? 고맙습니다.
그래서 tmp.getPrev(). getNext()는 tmp가 같은 원래 LNode를 제공하지 않을 것입니다. –
당신을 깜빡 잊어 버렸습니다 ... @Matthew –
제 생각에 나는 아니오라고 대답 할 것입니다. 'newnode'를 처음 만들면 LinkedList에 전혀 연결되지 않고 메모리에 혼자 앉아 있습니다. 'newnode'라는 새로운 노드가 삽입되어야하는 곳을 찾으면 모든 포인터를 올바르게 재정렬합니다. newnode.setPrev (tmp)의 라인을 따라 뭔가가있다; newnode.setNext (tmp.getNext()); tmp.setNext (newnode); newnode.getNext(). setPrev (newnode); – Matthew