| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1168 人关注过本帖
标题:非循环单链表创建过程求解
只看楼主 加入收藏
临渊
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-4-18
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
非循环单链表创建过程求解
程序代码:
typedef struct Node
{
    int data;             //  数据域
    struct Node * pNext;       //  指针域
}NODE,* PNODE;  

 

程序代码:
PNODE create_list(void)
{
    int len;  //  用来存放有效节点个个数
    int i;    
    int val;  //  用来临时存放用户输入的节点的值

     PNODE pHead = (PNODE)malloc(sizeof(NODE));   //  分配了一个不存放有效数据的头节点
    if (NULL == pHead)
    {
        printf("分配失败,程序终止\n");
        exit(-1);
    }

    PNODE pTail = pHead;   // 尾指针
    pTail->pNext = NULL;

    printf("请输入你需要生成的链表节点个数:");
    scanf("%d", &len);

    for (i = 0; i < len; ++i)
    {
        printf("请输入第%d个节点的值:",i + 1);
        scanf("%d", &val);

        PNODE pNew = (PNODE)malloc(sizeof(NODE));
        if (NULL == pNew)
        {
            printf("分配失败,程序终止\n");
            exit(-1);
        }
        pNew->data = val;
        pTail->pNext = pNew;
        pNew->pNext = NULL;
        pTail = pNew;
    }
    return pHead;
    }

后面四行代码看不太懂
pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
是否可以理解为:将输入的值val存入新节点pNew中的数据域, 尾指针pTail指向了pNew,pNew就挂在了pTail的后面,再将pNew中的指针域清空,但是最后一句 pTail = pNew 是什么意思?下一次循环时是不是又造出了一个新的节点pNew,那么上次循环中的pNew怎么办?
初学,实在找不到人问了,所以在这儿向各位大牛求解,感激不尽!
搜索更多相关主题的帖子: color 
2016-04-23 10:50
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:5 
这个你在纸上比划下就好理解。
pNew->data = val;     //新节点赋值
pTail->pNext = pNew;  //将新节点pNew加在链表的末尾,原来的末尾是pTail,现在是pNew
pNew->pNext = NULL;   //末尾节点pNew的下一个节点是空的,等待指向下一个新节点
pTail = pNew;         //pTail指向pNew节点,即pTail,pNew同是链表的末尾,下次再新建节点的时候pTail->pNext = pNew;就可以正确连接新节点


[此贴子已经被作者于2016-4-23 11:58编辑过]


   唯实惟新 至诚致志
2016-04-23 11:56
临渊
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-4-18
收藏
得分:0 
回复 2楼 qq1023569223
谢谢,我在研究看看

// 非宁静无以致远,以其临渊慕鱼,不如退而结网。
2016-04-23 19:12
临渊
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-4-18
收藏
得分:0 
回复 2楼 qq1023569223
pTail = pNew;  为什么pTail指向了pNew节点? 是不是把pNew的地址发送给了pTail?

// 非宁静无以致远,以其临渊慕鱼,不如退而结网。
2016-04-24 13:27
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
对啊,两个的地址一样了。

   唯实惟新 至诚致志
2016-04-24 14:21
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10570
专家分:43038
注 册:2014-5-20
收藏
得分:5 
以下是引用临渊在2016-4-24 13:27:01的发言:

pTail = pNew;  为什么pTail指向了pNew节点? 是不是把pNew的地址发送给了pTail?

pNew->data = val;     //新创建的节点
pNew->pNext = NULL;
pTail->pNext = pNew;  // 这时的 pTail 是指向上一个节点
pTail = pNew;         // 这时的 pTail 是指向新创建的节点(表尾记录指针)

pTail是链表节点指针(表记录指针)
2016-04-24 14:55
临渊
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-4-18
收藏
得分:0 
回复 6楼 吹水佬
非常感谢

// 非宁静无以致远,以其临渊慕鱼,不如退而结网。
2016-04-24 21:03
快速回复:非循环单链表创建过程求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013317 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved