첫 번째로, 나쁜 영어로 죄송합니다.Doubly Linked List 방법의 올바른 구현
이중 연결 목록을 구현하려고하지만 일부 메서드가 제대로 작동하는지 확신 할 수 없습니다. 실제로 clear()
, remove(const short DATA)
-은 DATA
, unique()
및 reverse()
과 동일한 요소를 모두 제거하므로 올바르게 작동하지 않습니다. 좋은 책, 비디오 또는 기사를 찾지 못했습니다. 나는 내 방식을 구현할 수 있습니다,하지만 난 공식적인 방법을 고수 (있는 경우) 그들이 잘 작동합니다 그래서 나의
void DLList::clear()
{
Node *pCurr = mHead;
while (pCurr != nullptr)
{
mHead = pCurr->mNext;
delete pCurr;
pCurr = mHead;
}
}
void DLList::remove(const short DATA)
{
Node *pCurr = mHead;
while (pCurr != nullptr)
{
if (pCurr->mData == DATA)
{
if (pCurr == mHead)
{
mHead = pCurr->mNext;
delete pCurr;
pCurr = mHead;
}
else
{
Node *pPrev = pCurr->mPrev;
pPrev->mNext = pCurr->mNext;
delete pCurr;
pCurr = pPrev->mNext;
}
}
else
pCurr = pCurr->mNext;
}
}
void DLList::unique()
{
Node *pCurr = mHead;
while (pCurr != nullptr)
{
Node *pNextDistinct = pCurr->mNext;
while (pNextDistinct != nullptr && pNextDistinct->mData == pCurr->mData)
{
pNextDistinct = pNextDistinct->mNext;
delete pCurr->mNext;
pCurr->mNext = pNextDistinct;
pNextDistinct->mPrev = pCurr;
}
pCurr = pNextDistinct;
}
}
void DLList::reverse()
{
Node *pPrev = nullptr;
Node *pCurr = mHead;
while (pCurr != nullptr)
{
pCurr->mPrev = pCurr->mNext;
pCurr->mNext = pPrev;
pPrev = pCurr;
pCurr = pCurr->mPrev;
}
mHead = pPrev;
}
먼저 종이에 연결된 목록과 각 작업은 무엇을 했습니까? 링크는 선이며, 노드는 상자입니다. 이것은 한 줄의 코드를 작성하기 전에해야 할 일입니다. 그런 다음 종이로 그린 코드를 번역하십시오. 문제가 발생하면 코드를 디버그하여 종이에 그려 놓은 것과 반대되는 부분을 확인하십시오. – PaulMcKenzie
게시하는 경우 _ "제대로 작동하지 않습니다"_, 또한 게시해야합니다 ** 이유 **. 무슨 일이 있었나요? 대신에 무슨 일이 일어난거야? –
@PaulMcKenzie 나는 아무것도 그리지 않았지만, 지금부터는 그렇게 할 것입니다. 조언 주셔서 감사합니다. – 0xbaadf00d