23Aaron 发表于 2014-5-25 23:35:40

小甲鱼写的这个循环单链表看不太懂,求讲解

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);
      pNew = GetNode(i, iCipher);这一部分是小甲鱼写的创建结点,目的是生成pNew新结点
      if (*ppHead == NULL)
      {
            *ppHead = pCur = pNew;这里就看不懂了,找不到头结点,也不知道怎么遍历的
            pCur->next = *ppHead;
      }
      else
      {
            pNew->next = pCur->next;
            pCur->next = pNew;
            pCur = pNew;
      }
    }
    printf("完成单向循环链表的创建!\n");
}

woiavril 发表于 2014-5-25 23:35:41

本帖最后由 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");
}

santaclaus 发表于 2014-5-27 17:08:09

学习了。。。

wuyixin 发表于 2015-1-26 11:17:50

woiavril 发表于 2014-5-25 23:35
回答你得问题就洗洗睡了,我已经把注释写的很详细了,可以说是有点啰嗦了,希望能帮助到你。

不错

起个名字想半天 发表于 2015-4-23 11:09:30

不错~

myqicq 发表于 2015-4-24 01:34:32

谢谢楼主的分享
页: [1]
查看完整版本: 小甲鱼写的这个循环单链表看不太懂,求讲解