Я исследовал сортировку вставки списка реализацию и боролся с использованием конечного указателя.
Итак, я понимаю основную идею и код с базовыми манипуляциями с указателем, но не могу пойматьпошаговый процесс сортировки с использованием конечного указателя.
Пример кода приведен здесь:
struct LIST * SortList(struct LIST * pList)
{
if(!pList || !pList->pNext)
return pList;
struct LIST * pSorted = NULL;
while (pList != NULL)
{
struct LIST * pHead = pList;
struct LIST ** ppTrail = &pSorted;
pList = pList->pNext;
while (!(*ppTrail == NULL || pHead->iValue < (*ppTrail)->iValue))
{
ppTrail = &(*ppTrail)->pNext;
}
pHead->pNext = *ppTrail;
*ppTrail = pHead;
}
return pSorted;
}
Похоже, ppTrail
используется для хранения отсортированной части данных инеясно, что происходит во внутреннем цикле while
.