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