• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

연결리스트 구현

21.08.05 16:17 작성 조회수 153

0


public void Remove(MyLinkedListNode<T> room) { if(Head == room) { Head = Head.Next; } if(Tail == room) { Tail = Tail.Prev; } if(room.Prev != null) { room.Prev.Next = room.Next; if(room.Next != null) { room.Next.Prev = room.Prev; } Count--; }
저는 여기서 room.Prev != null 부분과 room.Next != null 판별 부분이 왜 필요한지 의문을 가지게 됐습니다!
앞서 Head == room 부분과 Tail ==room 부분에서 이미 예외적인 경우를 체크 했기 때문에 그 외의 경우는 당연히 room.Next와 room.Prev는 null이 아니기 떄문에 굳이 쓸 이유가 없다고 생각했습니다. 그래서 저는
room.Prev.Next = room.Next; room.Next.Prev = room.Prev;
이부분은 무조건 실행 돼야 했다고 생각했습니다. 최종적으로 public void Remove(MyLinkedListNode<T> room) { if(Head == room) { Head = Head.Next; } if(Tail == room) { Tail = Tail.Prev; } room.Prev.Next = room.Next; room.Next.Prev = room.Prev; Count--; }
null 판단 부분을 지우고 브레이크 포인트를 잡아서 실행을 했는데 차이가 없었습니다. 혹시 다른 측면에서 문제가 있을까요??

답변 2

·

답변을 작성해보세요.

0

자르트님의 프로필

자르트

질문자

2021.08.09

아아..!!! 감사합니다!!!!!!

0

Head == room 부분과 Tail ==room 부분에서 이미 예외적인 경우를 체크 했기 때문에 그 외의 경우는 당연히 room.Next와 room.Prev는 null이 아니기 떄문에 굳이 쓸 이유가 없다고 생각했습니다

Head를 조작한 것이지, 딱히 room을 조작한 것은 아닙니다.
데이터를 딱 1개 넣어보고 다시 삭제해보거나,
터뜨릴 수 있는 케이스를 유도해보시면 되겠네요.