2013-03-07 4 views
1

질문은 내 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 자체를 가리키고 있기 때문에 그것은 내 생각에,하지만 내 코드는 그렇게하지 않습니다. 그럼 누가 잘못되었는지 말해 줄 수 있니? 고맙습니다.

답변

2

코드를 처음 보았을 때 실제로 sortedInsert 메서드에서 새 값 v에 대한 새 노드를 만들지 않는 것처럼 보입니다. 난 당신이 새로운 노드를 만들 필요가 있다고 생각 다음 LinkedList를 통해 itereate 다음 새 노드를 첨부하고 새로운 노드에서 캡처되기 때문에 데이터의 값을 설정에 대해 걱정하지. 어쩌면 이런 일의 종류 ...

LNode newnode = new LNode(); 
newnode.setVal(v); 

LNode tmp = head; 

while(v < head.getVal()) 
{ 
    //etc... 
} 

새로운 노드가 시작 부분에있는 경우에는 newnode를 가리 키도록 머리 변수를 변경해야한다는 것을 잊지 마십시오.

+0

그래서 tmp.getPrev(). getNext()는 tmp가 같은 원래 LNode를 제공하지 않을 것입니다. –

+0

당신을 깜빡 잊어 버렸습니다 ... @Matthew –

+0

제 생각에 나는 아니오라고 대답 할 것입니다. 'newnode'를 처음 만들면 LinkedList에 전혀 연결되지 않고 메모리에 혼자 앉아 있습니다. 'newnode'라는 새로운 노드가 삽입되어야하는 곳을 찾으면 모든 포인터를 올바르게 재정렬합니다. newnode.setPrev (tmp)의 라인을 따라 뭔가가있다; newnode.setNext (tmp.getNext()); tmp.setNext (newnode); newnode.getNext(). setPrev (newnode); – Matthew

관련 문제