C 当节点已经存在时,插入节点的代码实际上是如何编写的

C 当节点已经存在时,插入节点的代码实际上是如何编写的,c,pointers,struct,nodes,C,Pointers,Struct,Nodes,插入节点后,*sPtr是指向第一个节点的头指针,插入第二个节点的代码实际上是如何工作的?我知道while循环正在遍历节点,检查current是否等于null,这等于*sPtr的内容,以及输入的值是否大于current的数据。但我不明白的是它后面的if-else语句部分。如果我得到它,它会将newPtr放在列表的开头,但是在else部分,前面的ptr->nextPtr=newPtr; newPtr->nextPtr=currentPtr;如何将现有节点*sPtr->[existing node]链

插入节点后,*sPtr是指向第一个节点的头指针,插入第二个节点的代码实际上是如何工作的?我知道while循环正在遍历节点,检查current是否等于null,这等于*sPtr的内容,以及输入的值是否大于current的数据。但我不明白的是它后面的if-else语句部分。如果我得到它,它会将newPtr放在列表的开头,但是在else部分,前面的ptr->nextPtr=newPtr; newPtr->nextPtr=currentPtr;如何将现有节点*sPtr->[existing node]链接到新创建的已分配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);
   } 
} 

我不确定我说的是否有道理,但这确实让我困惑。感谢您的解释,提前谢谢!!:)

您的问题将在
else
路径中输入的场景是:在列表尾部添加第二个节点。然后,while循环
previousPtr
指向第一个且仅指向列表节点
previousPtr=*sPtr
currentPtr
指向列表末尾
currentPtr=NULL
。因此,
else
路径将把第一个/头列表节点的下一个指针链接到新的列表节点。新列表节点的下一个指针将指向列表的末尾(
NULL
)?因为我试着把它画出来理解它,让我们假设PreviousPtr有a作为数据,new有b作为数据,在else语句中,PreviousPtr有第一个/现有的节点,并指向NewPtr,然后NewPtr->nextPtr现在指向等于NULL的currentPtr。上一个->新->当前。所以*sPtr没有指向任何东西?
*sPtr
不会在
else
路径中更改,因此插入后指向同一节点。例如,如果列表仅包含一个数据为“a”的节点,而您插入了一个数据为“b”的节点,则
*sPtr
在插入前后指向数据为“a”的节点。数据为“b”的节点将仅链接到列表尾部和列表头部,即
*sPtr
不会更改。好吧,我想我对节点的理解是错误的,所以当前或以前的节点只是指向节点的指针?它们本身不是节点,只是*sPtr之类的指针?