我无法理解 C 语言中的排序链表。
我有以下代码:
void create(ListNode **pStart, int input)
{
ListNode *pNew;
ListNode *pPrevious;
ListNode *pCurrent;
pNew = malloc(sizeof(ListNode));
if (pNew != NULL)
{
pNew->data = input;
pNew->pNext = NULL;
pPrevious = NULL;
pCurrent = *pStart;
while (pCurrent != NULL && input > pCurrent->data)
{
pPrevious = pCurrent;
pCurrent = pCurrent->pNext;
}
if (pPrevious == NULL)
{
pNew->pNext = *pStart;
*pStart = pNew;
}
else
{
pPrevious->pNext = pNew;
pNew->pNext = pCurrent;
}
}
else
{
printf("%c not inserted. No memory available.\n", input);
}
}
我很难理解上面写着 pCurrent = *pStart;
的部分。从技术上来说,pNew 不是第一个头节点吗? pCurrent = *pStart
是什么?代表?
最佳答案
当调用 create
时,你必须区分 3 种情况:
- 列表为空
输入
值小于或等于最小的现有元素 -> 它成为新的列表头输入
值大于最小的现有元素 -> 将其插入列表中更远的位置
为了找到要插入的位置,代码从列表开始*pStart
开始并继续,直到找到插入位置。
pNew
代表要插入的项目,与查找插入位置无关。
关于c - 了解排序链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35553808/