AMPS:单向链表源码解读 (十)
ode;
}
/*****************************************************************
函数名称: SList_AppendGivenNode
功能描述: 在指定的结点后插入指定新结点
入参::
void **list 原链表
void* givenNode 指定的结点
void* newNode 待插入结点
出参:
void **list
返回值:
void
*****************************************************************/
void SList_PrependGivenNode(void **list, void* givenNode, void* newNode)
{
t_AMPSSList **slist = (t_AMPSSList**)list;
t_AMPSSList* node_ptr = (t_AMPSSList*)givenNode;
t_AMPSSList* snode = (t_AMPSSList*)newNode;
if(!node_ptr)
{
*slist = snode;
return;
}
snode->poAMPSSListNext = node_ptr;
snode->poAMPSSListPrev = node_ptr->poAMPSSListPrev;
if(NULL == node_ptr->poAMPSSListPrev)
{
*slist = snode;
}
else
{
node_ptr->poAMPSSListPrev->poAMPSSListNext = snode;
}
node_ptr->poAMPSSListPrev = snode;
}
/*****************************************************************
函数名称: SList_RemoveWithOutFree
功能描述: 删除链表中指定的结点,但不释放结点内容
入参::
t_AMPSSList** r_ppoAMPSSListHead 原链表
t_AMPSSList* r_poAMPSSListNode 待删除结点
出参:
t_AMPSSList** r_ppoAMPSSListHead
返回值:
int
*****************************************************************/
int SList_RemoveWithOutFree(t_AMPSSList** r_ppoAMPSSListHead, t_AMPSSList* r_poAMPSSListNode)
{
if((NULL == r_ppoAMPSSListHead) || (NULL == *r_ppoAMPSSListHead) || (NULL == r_poAMPSSListNode))
{
return AMPS_ERROR_FAILURE;
}
/*待删除结点为头结点*/
// If first element is found to be the element to be deleted
if(NULL == r_poAMPSSListNode->poAMPSSListPrev)
{
if(*r_ppoAMPSSListHead != r_poAMPSSListNode)
{
printf("SList_RemoveWithOutFree: list corrupted: head's previous pointer is NULL but node is not the first element in the list\n");
return AMPS_ERROR_FAILURE;
}
*r_ppoAMPSSListHead = r_poAMPSSListNode->poAMPSSListNext;
if(NULL != *r_ppoAMPSSListHead) // Is the last element in the list deleted
{
(*r_ppoAMPSSListHead)->poAMPSSListPrev = NULL;
}
}
else
{
r_poAMPSSListNode->poAMPSSListPrev->poAMPSSListNext = r_poAMPSSListNode->poAMPSSListNext;
if(NULL != r_poAMPSSListNode->poAMPSSListNext)
{
r_poAMPSSListNode->poAMPSSListNext->poAMPSSListPrev = r_poAMPSSListNode->poAMPSSListPrev;
}
}
r_poAMPSSListNode->poAMPSSListNext = NULL;
r_poAMPSSListNode->poAMPSSListPrev = NULL;
return AMPS_SUCCESS;
}
/*****************************************************************
函数名称: SList_GetNextNode
功能描述: 取链表下一结点
入参::
void* list 原链表
出参:
t_AMPSSList** r_ppoAMPSSListHead
返回值:
void* list
*****************************************************************/
void* SList_GetNextNode(void* list)
{
t_AMPSSList *slist = (t_AMPSSList*)list;
if(!slist)
{
return NULL;
}
return slist->poAMPSSL