-
데이터 삭제 메서드 구현
데이터 삭제 연산에 필요한 메서드들을 구현한다.
SinglyCircularLinkedList.cpp
/// <summary> /// SinglyCircularLinkedList에서 가장 처음 일치한 지정된 값을 포함한 노드를 제거한다. /// </summary> /// <param name="value">제거할 값</param> bool SinglyCircularLinkedList::Remove(int value) { if (m_head != nullptr) { SinglyCircularLinkedListNode* curNode{ m_head }; do { if (curNode->m_data == value) { Remove(curNode); return true; } curNode = curNode->m_next; } while (curNode != m_head); } return false; } /// <summary> /// SinglyCircularLinkedList에서 지정된 노드를 제거한다. /// </summary> /// <param name="node">제거할 노드</param> void SinglyCircularLinkedList::Remove(const SinglyCircularLinkedListNode* node) { if (node == nullptr) { throw std::invalid_argument("node"); } if (m_head != nullptr) { SinglyCircularLinkedListNode* prevNode{ nullptr }; SinglyCircularLinkedListNode* curNode{ m_head }; do { if (curNode == node) { if (prevNode != nullptr) { prevNode->m_next = curNode->m_next; } else { UpdateHead(curNode->m_next); } PushNode(curNode); m_count--; return; } prevNode = curNode; curNode = curNode->m_next; } while (curNode != m_head); } throw std::out_of_range("node"); } /// <summary> /// SinglyCircularLinkedList의 모든 노드를 제거한다. /// </summary> void SinglyCircularLinkedList::Clear() { if (m_head != nullptr) { SinglyCircularLinkedListNode* head{ m_head }; do { SinglyCircularLinkedListNode* curNode{ m_head }; m_head = m_head->m_next; PushNode(curNode); } while (m_head != head); m_head = nullptr; } m_count = 0; }