Я пытаюсь понять этот код из книги Deitels 5th edition c.Как вставить новый узел в пустой список?
Если я вставляю новый узел в связанный список, почему я устанавливаю nextPtr = * sPtr. Не должен ли первый узел иметь nextPtr из NULL?
Также что означает * sPtr = newPtr?
struct listNode {
char data;
struct listNode *nextPtr;
};
void insert(ListNodePtr *sPtr, char value)
{
ListNodePtr newPtr; /* pointer to a new node */
ListNodePtr previousPtr; /* pointer to a previous a node in list */
ListNodePtr currentPtr; /* pointer to current node in list */
newPtr = malloc(sizeof(ListNode)); /* create node */
if (newPtr != NULL){ /* is space available */
newPtr->data = value;
newPtr->nextPtr = NULL;
previousPtr = NULL;
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 previosuPtr and currentPtr */
previousPtr->nextPtr = newPtr;
newPtr->nextPtr = currentPtr;
}
}
}
Я вижу. Это начинает иметь смысл. – runners3431
@ user995864: Прежде всего, я думаю, что это должно быть '(* sPtr) -> nextPtr', так как' sPtr' является указателем на listpointer. Если новое значение было вставлено в начале '(* sPtr) -> nextPtr', укажет на то, что' * sPtr' было до вставки. Для пустого списка (* sPtr) будет 'NULL' в начале вставки, поэтому в этом случае' (* sPtr) -> nextPtr' будет 'NULL' впоследствии. – Grizzly
Хорошо. Я думал, что * sPtr имеет значение в списке пустых узлов. Забыл, что он был нулевым по первому вставленному значению. Это полностью разъясняет это! Спасибо! Ненависть быть новичком, но я добираюсь туда так медленно! – runners3431