2014-06-21 4 views
0

MATLAB에서 링크 된 목록 클래스 구현을 사용하려고합니다.
이제 노드를 목록에 삽입하는 유일한 방법은 insertBefore() 또는 insertAfter()을 사용하는 것입니다.MATLAB의 연결된 목록 클래스 - insertAfter()없이 수동으로 노드 삽입

newnode = dlnode(new); 
ptr.Next = newnode; 
newnode.Next=ptrnxt; 

같은
하지만 새 노드의 Next 값을 지정하여 수동으로 노드를 삽입 할,이 작품을겠습니까? 현재 노드의 포인터를 유지 관리하지 않기 때문에 insertBefore() 또는 insertAfter()을 특정 응용 프로그램에서 사용할 수 없습니다.

연결된 목록 클래스에 대한 자세한 내용은 here입니다.

답변

1

아니, 나는 그것이 ptrnxt에 업데이트를 NextPrevnewnode 설정되어 있는지 확인 발생하고 무시하고 다른 모든 논리를 무시하기 때문에 그 코드의 단지 그 세 라인 작업 것이라고 생각하지 않는 것 Prev이 이제 newnode이되도록해야합니다. (그리고 Next 속성은 비공개이므로 공개로 변경해야합니다.)

의미가 무엇인지 분명하지 않습니다. 특정 응용 프로그램에서 insertBefore() 또는 insertAfter()를 사용할 수 없습니다. 현재 노드의 포인터를 유지하는 것. 그러나 newnode 사이에 삽입 할 노드가 있습니까? 나는 노드의 순서 (새 노드를 삽입하기 전에)가 …,ptr,ptrnxt,…이라고 추측한다. 그럼 왜 그냥 …,ptr,newnode,ptrnxt,…에 순서를 변경 할 각 노드에 대한 모든 세 가지 속성이 자동으로 올바르게 설정/것이다

newnode.insertAfter(ptr); 

를 사용하지 마십시오.

그 밖에, 당신은

newnode  = dlnode(new); 
ptr.Next  = newnode; 
newnode.Prev = ptr;  % to make sure that newnode points back to ptr 
newnode.Next = ptrnxt; 
ptrnxt.Prev = newnode; % to make sure that ptrnxt points back to newnode 

훨씬 쉽게와 insertAfterinsertBefore 방법을 사용하는 것이 안전한처럼 뭔가 코드를 변경해야합니다.

+0

나는 당신이 옳다고 생각합니다. 기본 코드에 대한 이해가 약간 명확하지 않았습니다. 구현이 이제는 괜찮습니다! –

관련 문제