Как работает код для вставки узла, когда узел уже существует - PullRequest
0 голосов
/ 19 октября 2019

После вставки узла, * 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);
   } 
} 

Я не уверен, правильно ли я понимаю, но это действительно сбивает меня с толку. Спасибо за любые объяснения, спасибо заранее! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...