2014-05-13 2 views
-2

이중 연결 목록 중간에 노드를 삽입하고 싶습니다. 이것은 제 구현입니다.
내 기본 인수는 삽입 할 노드 앞에있는 노드입니다.이중 연결 목록 중간에 노드 삽입

public class DListNode{ 
    public DListNode prev,next; 
    public Object item; 
    public DListNode(Object i,DListNode n,DListNode p){ 
     prev=p; 
     next=n; 
     item=i;  
    } 
    public DListNode(Object i){ 
     this(i,null,null); 
    } 
} 

public void insertAfter(Object e,DListNode firstNode) throws UnderFlow{ 
     if(isEmpty()||(head==tail)) 
      throw new UnderFlow("need at least two nodes"); 
     else{ 
      DListNode v=firstNode.next; 
      DListNode k=new DListNode(e,v,firstNode); 
      firstNode =k; 
      v.prev=k; 
     } 
    } 

public static void main (String args[]) throws UnderFlow{ 
     DList d=new DList(); 

     d.insertFront("d"); 
     d.insertFront("b"); 

     d.insertAfter("c",d.head); 

     System.out.println(d.toString()); 

    } 

내가 실수를하고있는 곳을 볼 수는 없지만 b 만 인쇄합니다. d.
c가 중간에 삽입되지 않았습니다.
누군가 내가 잘못하고있는 부분을 지적 해 줄 수 있습니까?

+2

'firstNode = k;'는'insertAfter()'내부에서 무엇을하고 있다고 생각하십니까? 당신은 결코 "이전 노드의 다음 항목"을 새 항목에 설정하지 않았습니다 ... – John3136

+0

@ John3136 : 'firstNode.next = k'로 변경했는데 이제는 c가 인쇄됩니다. firstNode = k라고 할 때 firstNode라고 생각했습니다. get이 k를 가리키고 새로운 아이템에 "이전 노드의 다음 노드"를 설정하는 문제를 해결합니다. –

+0

Google에서이를 수행 할 수있는 방법이 많아야합니다. – Marichyasana

답변

1

어떤 의미로 변수 이름을 사용하는 것이 좋습니다. 당신의 이름은 k처럼 vfirstNode.next =k;을해야

대신 firstNode =k;

을 이해하기 끔찍하지만 적절한 이름으로 다시 작성하는 것이 좋습니다. 이와 같이