AMPS:双向链表源码解读 (七)

2014-11-24 08:28:16 · 作者: · 浏览: 14
return AMPS_ERROR_FAILURE;
}
if (func_ptr)
{
if (AMPS_ERROR_FAILURE == func_ptr(&(node->pvData)))
{
return AMPS_ERROR_FAILURE;
}
}
/*删除头结点*/
if (NULL != node->poAMPSSListNext)
{
(*list)->poAMPSSListHead = node->poAMPSSListNext;
(*list)->poAMPSSListHead->poAMPSSListPrev = NULL;
} else
{
(*list)->poAMPSSListHead = NULL;
}
(*list)->uchCount--;
AMPS_InternalFree(node);
return AMPS_SUCCESS;
}
return AMPS_SUCCESS;
}
/*****************************************************************
函数名称: DList_RemoveFirstNode
功能描述: 删除双向链表中指定位置的结点
入参::
t_AMPSDList* list 原链表
int r_nNodeLocation 指定的结点位置
AMPS_LListRemoveLinkDataCallback func_ptr 结点操作函数回调
出参:
t_AMPSDList** 操作后的链表
返回值:
int
*****************************************************************/
void DList_RemoveNthNode(t_AMPSDList** r_ppoDList, int r_nNodeLocation, AMPS_LListRemoveLinkDataCallback AMPS_LListRemoveLinkDataCallback)
{
t_AMPSSList* poSList = (*r_ppoDList)->poAMPSSListHead;
t_AMPSSList* poSListTemp1 = NULL;
t_AMPSSList* poSListTemp2 = NULL;
if(!poSList)
{
return;
}
if(r_nNodeLocation < (*r_ppoDList)->uchCount)
{
int nLocation = 0;
/*遍历链表*/
for(poSListTemp1 = poSList; poSListTemp1; )
{
if(nLocation == r_nNodeLocation)
{
//AMPS_LListRemoveLinkDataCallback(poSListTemp1->pvData, r_pvArg);
break;
}
poSListTemp2 = poSListTemp1->poAMPSSListNext;
poSListTemp1 = poSListTemp2;
nLocation++;
}
}
return;
}
/*****************************************************************
函数名称: DList_RemoveFirstNode
功能描述: 在双向链表指定结点后插入一个新结点
入参::
t_AMPSDList* list 原链表
t_AMPSSList *positionNode 指定的结点
t_AMPSSList *positionNode 待插入的新结点数据
出参:
NA
返回值:
t_AMPSDList* 操作后的链表
*****************************************************************/
t_AMPSSList* DList_InsertAfter (t_AMPSDList *list, t_AMPSSList *positionNode, t_AMPSSList *positionNode)
{
t_AMPSSList *pNewNode = NULL;
t_AMPSSList *pPosNode = positionNode;
if (NULL == positionNode)
{
//printfdlist_insertafter: input parameters are invalid \n");
return NULL;
}
/*构造新结点*/
pNewNode = AMPS_InternalMalloc(sizeof(t_AMPSSList));
pNewNode->pvData = pvData;
/*把新结点连接到指定结点之后*/
pNewNode->poAMPSSListNext = pPosNode->poAMPSSListNext;
pNewNode->poAMPSSListPrev = pPosNode;
/*断开指定结点与之前结点(向后)的连接,并指向新结点*/
if (NULL != pPosNode->poAMPSSListNext)
pPosNode->poAMPSSListNext->poAMPSSListPrev = pNewNode;
pPosNode->poAMPSSListNext = pNewNode;
list->uchCount++;
return pNewNode;
}
/*****************************************************************
函数名称: DList_RemoveFirstNode