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

DWG담님의 프로필 이미지
DWG담

작성한 질문수

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

자료구조 연결리스트 질문있습니다.

작성

·

247

0

그림 못그려서 죄송합니다 ㅠ 

그려가면서 이해하려고했는데, 결국 연결리스트가 추가되는 형식은

Room(LinkedListNode)이 담을 수 있는 data와 그리고 다음과 이전의 Room을 가르키는 참조변수 prev,next를 가지고있고

RoomList(LinkedList)는 AddLast가 호출될 때 Room객체를 생성하고 Head는 첫번째. Tail은 AddLast가 호출될때마다      생성되는 newRoom객체를 가르키면서 prev와 next를 계속 연결해주는 것이라고 이해하면될까요? 

답변 3

1

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

(1),(2)는 말씀대로 삭제를 의도하는 코드가 아니라서
그냥 Head, Tail의 위치만 조정하는게 맞습니다만.
if else문이 아니라 if - if 인 것에 주의하세요!

처음/마지막 노드라서 (1), (2)에 걸렸다고 바로 return하는게 아니라,
이어서 (3), (4)도 실행되니 결국 삭제를 처리를 해주게 됩니다.

1

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

네 맞습니다!

물론 이는 일반적으로 제일 많이 사용되는 [양방향 연결리스트] 기준이고,
그냥 한쪽 방향으로 prev없이 next만 관리해
연결하는 [단방향 연결리스트]도 있습니다.

0

DWG담님의 프로필 이미지
DWG담
질문자

감사합니다.. 하나더 질문이있는데 연결리스트 RoomList의 Remove함수에서

 public void Remove(Room<T> room)

        {  

            if (Head == room)

            {

                Head = Head.Next;                  (1)

            }

            if (Tail == room) 

            {

                Tail = Tail.Prev;                        (2)

            }

          if (room.Prev != null)

                (room.Prev).Next = room.Next;                 (3)

            if (room.Next != null) 

                (room.Next).Prev = room.Prev;                 (4)

(3),(4)는 직관적으로 Head와 Tail이 가르키는 부분이아닌 중간사이에있는 노드객체가 예로들어 

103번을 지운다고하면 (103번방의 이전 102번방).Next는 104번방을 가르키게해 103번방을 가르키는놈이없어 노드객체가 사라지는건 알겠는데.

(1),(2)번은 100번을 넣을때(Head) Head에 Head의 Next가 가르키는 101번을 넣어서 새로 101번을 가르키게 한다해도 101번 노드객체의 Prev는 100번을 가르키니 100번은 안사라지는게 맞지않나요? 

DWG담님의 프로필 이미지
DWG담

작성한 질문수

질문하기