①时间复杂度为N:
void InsertNotHead(PSListNode pHead, PSListNode pos, DataType data)
{PSListNode pPreNode = pHead;PSListNode pPreNode = pHead;if (NULL == pos){return;}else{//先找到pos结点前面的结点while(pCurNode != pos){pPreNode = pCurNode;pCurNode = pCurNode->pNextNode;}PSListNode pNewNode = ByeNode(data);if (NULL == pNewNode){printf("开辟结点空间失败!\n");return;}else{//把插入的结点插入pos前面的结点与pos结点之间pPreNode->pNextNode = pNewNode;pNewNode->pNextNode = pCurNode;}}
}
②时间复杂度为1:
void InsertNotHead(PSListNode pos, DataType data)
{if (NULL == pos){return;}else{PSListNode pNewNode = ByeNode(data);if (NULL == pNewNode){printf("开辟结点空间失败!\n");return;}else{//交换pos和pNewNode的数据(相当于交换了两个结点的位置),使问题转换为在pos指向的结点的下一个结点处插入新结点pNewNode->data = pos->data;pos->data = data;pNewNode->pNextNode = pos->pNextNode;pos->pNextNode = pNewNode;}}
}