鱼C论坛

 找回密码
 立即注册
查看: 4276|回复: 5

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

[复制链接]
发表于 2014-5-25 23:35:40 | 显示全部楼层 |阅读模式
3鱼币
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");
}

最佳答案

查看完整内容

回答你得问题就洗洗睡了,我已经把注释写的很详细了,可以说是有点啰嗦了,希望能帮助到你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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");
}

评分

参与人数 1鱼币 +3 贡献 +2 收起 理由
23Aaron + 3 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-27 17:08:09 | 显示全部楼层
学习了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-26 11:17:50 | 显示全部楼层
woiavril 发表于 2014-5-25 23:35
回答你得问题就洗洗睡了,我已经把注释写的很详细了,可以说是有点啰嗦了,希望能帮助到你。

不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-23 11:09:30 | 显示全部楼层
不错~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-24 01:34:32 From FishC Mobile | 显示全部楼层
谢谢楼主的分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 05:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表