这是一篇简短的API实现,输入链表头和指定节点,求任意单链表的指定长度。
需要考虑的因素:
- 指定节点是否在链表内;
- 链表是否有环
- 目标节点是否为NULL
PP_INT32 GetLstLen(const pstNode pstL, const pstNode pstTgt) {
REG_FUNC_NAME("FindSigleLnkLstJnt_Arr");
enErr_val enRetVal = ERR_SUCCESS;
if (!pstL) RET_LOCAL(enRetVal = ERR_INVALID_PARAMETER);
bool bInLst = FALSE;
UCHAR ucCnt = 0; //control loop in case of circle one-way linked list
UINT32 iLen = 0;
pstNode pstCur = pstL;
pstNode pstJnt = NULL;
(void)LstWithLoop(pstL, &pstJnt);
while (pstCur) {
++iLen;
if (pstCur == pstJnt) {
++ucCnt;
if (ucCnt == 2) break;
}
if (pstCur == pstTgt) {
bInLst = TRUE;
pstCur = pstL;
break;
}
pstCur = pstCur->pstNxt;
}
if (!bInLst && pstTgt) iLen = INT_INVALID;
return(iLen);
}