После вставки узла, * sPtr, который является указателем заголовка, указывающим на первый узел, как на самом деле работает код для вставки второго узла? я понимаю, что цикл while проходит через узлы, проверяя, равен ли ток нулю, который равен содержанию * sPtr, и если введенное значение больше данных текущего. но то, что я не понимаю, это часть заявления if else после нее. Если я получаю, это помещает newPtr в начало списка, но остальную часть, где previousPtr-> nextPtr = newPtr;newPtr-> nextPtr = currentPtr;как это связывает существующий узел * sPtr -> [существующий узел] с вновь созданным предыдущим и текущим узлом, которому был назначен jsut?
void insert(ListNode* *sPtr, char value)
{
ListNode* newPtr = malloc(sizeof(ListNode));
if (newPtr != NULL) {
newPtr->data = value;
newPtr->nextPtr = NULL;
ListNode* previousPtr = NULL;
ListNode* currentPtr = *sPtr;
while (currentPtr != NULL && value > currentPtr->data) {
previousPtr = currentPtr;
currentPtr = currentPtr->nextPtr;
}
// insert new node at beginning of list
if (previousPtr == NULL) {
newPtr->nextPtr = *sPtr;
*sPtr = newPtr;
}
else { // insert new node between previousPtr and currentPtr
previousPtr->nextPtr = newPtr;
newPtr->nextPtr = currentPtr;
}
}
else {
printf("%c not inserted. No memory available.\n", value);
}
}
Я не уверен, правильно ли я понимаю, но это действительно сбивает меня с толку. Спасибо за любые объяснения, спасибо заранее! :)