单链表的创建、打印和释放见博客 一:单链表的创建、打印和释放
1. 创建带环单链表
/**
* 创建带环单链表
* @param[in] aArray[] int :单链表结点值的数组
* @param[in] iCnt int :单链表结点值的数组长度
* @param[in] iIdx int :单链表环入口结点值在数组中的位置
*/
NODE_t * CreateCircleSList(int aArray[], int iCnt, int iIdx) {
NODE_t *pList = CreateArraySList(aArray, iCnt);
if (pList == NULL) {
printf("CreateArraySList error\n");
return NULL;
}
/* 如果环的入口结点超出结点数,环的入口设置为最后一个结点 */
if (iIdx > iCnt) {
iIdx = iCnt;
}
/* 遍历找到单链表的第iIdx个结点和最后一个结点 */
NODE_t *pLast = NULL; // 保存单链表的最后一个结点
NODE_t *pNode = NULL; // 保存单链表的第iIdx个结点
NODE_t *pHead = pList->pNext; // pHead指向单链表的第一个有效结点
int iNo = 0;
while (pHead != NULL) {
iNo++;
if (iNo == iIdx) {