일지

자료구조...15

niamdank 2020. 10. 13. 09:12

데이터 삭제 메서드 구현

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

 

SinglyLinkedList.cpp

/// <summary>
/// SinglyLinkedList에서 가장 처음 일치한 지정된 값을 포함한 노드를 제거한다.
/// </summary>
/// <param name="value">제거할 값</param>
bool SinglyLinkedList::Remove(int value)
{
	SinglyLinkedListNode* prevNode = nullptr;
	SinglyLinkedListNode* curNode = m_head;
	while (curNode != nullptr)
	{
		if (curNode->m_data == value)
		{
			break;
		}
		prevNode = curNode;
		curNode = curNode->m_next;
	}

	if (curNode == nullptr)
	{
		return false;
	}

	if (prevNode == nullptr)
	{
		m_head = curNode->m_next;
	}
	else
	{
		prevNode->m_next = curNode->m_next;
	}
	PushNode(curNode);

	m_count--;
	return true;
}

/// <summary>
/// SinglyLinkedList에서 지정된 노드를 제거한다.
/// </summary>
/// <param name="node">제거할 노드</param>
void SinglyLinkedList::Remove(const SinglyLinkedListNode* node)
{
	Remove(node->m_data);
}

/// <summary>
/// SinglyLinkedList의 모든 노드를 제거한다.
/// </summary>
void SinglyLinkedList::Clear()
{
	while (m_head != nullptr)
	{
		SinglyLinkedListNode* curNode = m_head;
		m_head = m_head->m_next;
		PushNode(curNode);
	}
	m_count = 0;
}