ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자료구조...27
    일지 2020. 11. 1. 16:26

    데이터 삭제 메서드 구현

    데이터 삭제 연산에 필요한 메서드들을 구현한다.

     

    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;
    }

    댓글

Designed by Tistory.