本帖最后由 woiavril 于 2014-5-26 01:55 编辑
回答你得问题就洗洗睡了,我已经把注释写的很详细了,可以说是有点啰嗦了,希望能帮助到你。static void CreaList(NodeType **ppHead, const int n)
{
int i, iCipher;
NodeType *pNew, *pCur;
for (i = 1; i <= n; i++)
{
printf("输入第%d个人的密码: ", i);
scanf("%d", &iCipher);
/*GetNode函数式用来生成新的节点,这个你知道吧!我的注释是写在代码的上面*/
pNew = GetNode(i, iCipher);
/*主函数main里有这么一句NodeType *pHead = NULL;所以第一次肯定进入if语句*/
if (*ppHead == NULL)
{
/*pCur表示指向当前节点(你也可以理解为指向当前链表最后一个节点),ppHead当然是头节点,
pNew是指向GetNode()函数新创建的节点,这里让当前指针pCur和头指针*ppHead都指向pNew*/
*ppHead = pCur = pNew;
/*这里的目的就是让当前节点指针pCur->next指向头节点,而当前节点指针pCur就是头指针
说白了这里就是让头节点指向头节点了,这时就形成了一个最简单的环了*/
pCur->next = *ppHead;
}
/*因为第一次创建pNew时头节点已经在if语句里赋初值了,所以以后每次GetNode()创建新节点
都会进入else语句了*/
else
{
/*我就说下第二次创建新节点的情况,以后的都是一样的,pCur->next是指向头节点的(这个条件
一直成立),这句就是让pNew->next指向头节点了(因为它是新插入的,也就是链表最后一个,它
必须指向头节点,这样才能形成环)*/
pNew->next = pCur->next;
/*这里就让当前链表的最后的节点pCur(这里pNew还没有插入链表)的next指针指向要插入链表的节点
pNew*/
pCur->next = pNew;
/*这时pNew才算是已经插入到链表里了,pCur表示的当前链表的最后节点,这时pNew已经插入了链表
所以它是最后一个了,所以让pCur指向pNew,这样就可以进行下次节点插入链表*/
pCur = pNew;
}
}
printf("完成单向循环链表的创建!\n");
}
|