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

2014-11-24 08:28:16 · 作者: · 浏览: 4
>poAMPSSListNext = NULL;
r_poAMPSSListNode->poAMPSSListPrev = NULL;
if (poAMPSSListHead)
{
poAMPSSListLastNode = SList_Last(poAMPSSListHead);
if (poAMPSSListLastNode)
{
poAMPSSListLastNode->poAMPSSListNext = r_poAMPSSListNode;
r_poAMPSSListNode->poAMPSSListPrev = poAMPSSListLastNode;
}
} else
{
r_poAMPSDList->poAMPSSListHead = r_poAMPSSListNode;
}
r_poAMPSDList->uchCount += 1;
}
/*****************************************************************
函数名称: DList_GetNthNode
功能描述: 获取指定位置的结点
入参::
t_AMPSDList* poDList_i 原链表
int nNodeLocation_i 指定的位置
出参:
返回值:
void* 找到的结点指针
*****************************************************************/
void* DList_GetNthNode( t_AMPSDList* poDList_i, int nNodeLocation_i )
{
t_AMPSSList* poListNode = NULL;
t_AMPSSList* poLastListNode = NULL;
int nCurrentLocation = 1;
switch( nNodeLocation_i )
{
case 0: // first node
poListNode = poDList_i->poAMPSSListHead;
break;
case -1: // last node
poListNode = poDList_i->poAMPSSListHead;
poLastListNode = poListNode;
/*遍历找到最后一个结点,此处可用SList_Last*/
while( NULL != poListNode )
{
poLastListNode = poListNode;
poListNode = poListNode->poAMPSSListNext;
}
poListNode = poLastListNode;
break;
default: // node at location (1-based)
poListNode = poDList_i->poAMPSSListHead;
if( nNodeLocation_i > poDList_i->uchCount && nNodeLocation_i < 0 )
{
poListNode = NULL;
}
else
{
while( NULL != poListNode )
{
if( nCurrentLocation == nNodeLocation_i )
{
break;
}
nCurrentLocation++;
poListNode = poListNode->poAMPSSListNext;
}
}
}
return (poListNode);
}
/*****************************************************************
函数名称: DList_Copy
功能描述: 链表复制函数,在复制过程中可以处理结点,并将处理后的结点存放在
目标链表中
入参::
t_AMPSDList* pSrcList_i 原链表
t_AMPSDList* pDestList_i 目标链表
AMPS_LListDuplicate pfnDup_i 复制结点的回调函数
出参:
void* 找到的结点指针
返回值:
int
*****************************************************************/
int DList_Copy(t_AMPSDList* pSrcList_i, t_AMPSDList* pDestList_i, AMPS_LListDuplicate pfnDup_i)
{
int nRetVal = AMPS_SUCCESS;
void* pvDupData = NULL;
t_AMPSSList* poNode = NULL;
for( poNode = pSrcList_i->poAMPSSListHead; poNode != NULL; poNode = poNode->poAMPSSListNext )
{
pvDupData = (pfnDup_i)(poNode->pvData);
if( NULL == pvDupData )
{
nRetVal = AMPS_ERROR_FAILURE;
break;
}
AMPS_DListAppend( pDestList_i, pvDupData );
}
return (nRetVal);
}
/*****************************************************************
函数名称: DList_RemoveFromData
功能描述: 从双向链表中删除指定内容的结点
入参::
t_AMPSDList* pSrcList_i 原链表
void* pv