Exemple #1
0
KNode<KStudent>* KManager::Swap(KNode<KStudent>* a, KNode<KStudent>* b)
{
	KNode<KStudent> * aPrev = a->m_pPrev;
	KNode<KStudent> * aNext = a->m_pNext;
	KNode<KStudent> * bPrev = b->m_pPrev;
	KNode<KStudent> * bNext = b->m_pNext;

	
	if (aPrev != NULL) // 1번 head	<-> b;
	{
		SwapPoint(aPrev, a);
		//aPrev->m_pNext = b;
		//b->m_pPrev = aPrev;
	}
	else
	{
		m_List.m_pHead = b;
		b->m_pPrev = NULL;
	}
	// 1번 tail == b;
	
	if (aNext != b) //b<->a
	{
		SwapPoint(b, aNext);
		//b->m_pNext = aNext;
		//aNext->m_pPrev = b;
		//a -> c -> b
		if (aNext->m_pNext == b)
		{
			SwapPoint(aNext, a);
			//aNext->m_pNext = a;
			//a->m_pPrev = aNext;
		}
		else
		{
			SwapPoint(bPrev, a);
			//bPrev->m_pNext = a;
			//a->m_pPrev = bPrev;
		}
	}
	else //b <-> a
	{
		SwapPoint(b, a);
		//b->m_pNext = a;
		//a->m_pPrev = b;
		a->m_pNext = bNext;
		if (bNext != NULL)
		{
			bNext->m_pPrev = a;
		}
	}
	//a->c ->b ->d
	if (bNext != NULL)
	{
		SwapPoint(a, bNext);
		//a->m_pNext = bNext;
		//bNext->m_pPrev = a;
	}
	else
	{
		a->m_pNext = NULL;
	}
	if (aNext == b)return a;
	return aNext;
}
void DoubleTunnelDraw::reverse()
{
    LinkedGEDraw::reverse();
    SwapPoint( m_leftStartPt, m_leftEndPt );
    SwapPoint( m_rightStartPt, m_rightEndPt );
}