인프런 커뮤니티 질문&답변

TaeChoon Pakr님의 프로필 이미지
TaeChoon Pakr

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘

연결 리스트 구현 연습

Remove 함수구현

작성

·

322

0

안녕하세요.

연결리스트에서 가능한 노드의 연결상태는

1. 노드한개 Head =Tail 

Head=Tail 이 가르키는 노드의 prev 와 next 는 null

2. 노드두개 (Head 한개 Tail 한개)

Head가 가리키는 노드의 prev는 null , next는 prev가 가리키는 노드 ,

Prev가 가리키는 노드의 prev는 Head가 가리키는 노드 , next는 null

3.노드세개이상 

으로 일반화해 분류 할 수 있습니다.

이때 구현하신 Remove 함수를 보면

If(Head==node) 

Head=Head.next

If(Tail==node)

Tail=Tail.prev

에서는 노드의 연결상태ㅡ두번째 경우에서 첫번째 경우로 갈때 삭제가 이루어지고나서 결과적으로 남는  Head 와 Tail이 동시에 가리키는 Node의 prev 또는 next가 null이 아닌 경우가 발생합니다. 따라서

If(Head==node) 

[Head=Head.next

Tail.prev=null;]

If(Tail==node)

[Tail=Tail.prev 

If(Head.next!=null)

{Head.next=null}

]

으로 해주어야 제대로 되지 않나 싶은데요 , 

(연결리스트의 특성상 여기서는 문제 없을지라도 기능을 확장시 에러발생이 가능할 수 도 있으니)  답변부탁드립니다 감사합니다

답변 2

0

TaeChoon Pakr님의 프로필 이미지
TaeChoon Pakr
질문자

아하! Head not equal Node && Tail not equal Node 의 경우에만 

언급하신 코드가 실현된다고 생각했더니 오해가 생겼군요 . 

감사합니다.

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

에서는 노드의 연결상태ㅡ두번째 경우에서 첫번째 경우로 갈때 삭제가 이루어지고나서 결과적으로 남는  Head 와 Tail이 동시에 가리키는 Node의 prev 또는 next가 null이 아닌 경우가 발생합니다]

-> 그렇지 않습니다. 말씀하시는 null 처리는 아래 부분에서 챙겨지게 됩니다.

TaeChoon Pakr님의 프로필 이미지
TaeChoon Pakr

작성한 질문수

질문하기