| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1961 人关注过本帖, 1 人收藏
标题:链表插入操作案例测试给大家参考下
只看楼主 加入收藏
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
收藏
得分:0 
    for(i=0;i<N;i++)
    {
        pfirst=(pdate)malloc(sizeof(tdate));//创建新节点
        pfirst->month=cr[i].month;
        pfirst->day=cr[i].day;
        pfirst->year=cr[i].year;
        pfirst->next=NULL; //新节点下一个节点赋值为空1  
        psecond->next=pfirst;//pSecond->next=新节点2   
        psecond=pfirst;//pSecond=新节点3
                                                1 2 3 不觉得矛盾么
    }

void prnlist(pdate head)
{
    pdate pfirst=head->next;//遍历你每次从第二个节点开始遍历
    while(pfirst!=NULL)
    {
        printf("%6u%4u%4u\n",pfirst->year,pfirst->month,pfirst->day);
        pfirst=pfirst->next;
    }
}
   


[此贴子已经被作者于2017-3-21 19:52编辑过]

2017-03-21 19:45
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用烟雨晨曦在2017-3-21 19:45:55的发言:

    for(i=0;i
我在正序输出里 8个节点 一个不落 全部输出  这也说明prnlist 也没啥毛病吧

DO IT YOURSELF !
2017-03-21 20:07
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
收藏
得分:0 
回复 12楼 wp231957
我看错了,你用的是尾插法,没毛病,我以为你用的是头插法,
还有就是我的头指针和你的意思不一样,我的头指针代表的是链表的第一个元素,
你的头指针表示的只是一个地址,记录了第一个元素的地址,并不参与运算,而我的直接参与运算。(这就是你东西多出来的原因还是一大串数字的原因)。

pdate linkcre(void)
{
    pdate head,pfirst,psecond;
    tdate cr[8]=
    {
        {10,10,2000},{11,11,2012},{05,05,2005},{01,01,2006},{12,30,2016}
        ,{01,01,2005},{02,02,2008},{03,03,2009}
    };
    pfirst=(pdate)malloc(sizeof(tdate)); //多出来的就在这里,你并没有给这里赋值 所以就是一个随机值,你链表反转操作的这里了----------------------------------------------------------
    head=pfirst;
    psecond=pfirst;
    int i;
    for(i=0;i<N;i++)
    {
        pfirst=(pdate)malloc(sizeof(tdate));
        pfirst->month=cr[i].month;
        pfirst->day=cr[i].day;
        pfirst->year=cr[i].year;
        pfirst->next=NULL;
        psecond->next=pfirst;
        psecond=pfirst;
    }
    return head;
}



[此贴子已经被作者于2017-3-21 20:53编辑过]

2017-03-21 20:37
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用烟雨晨曦在2017-3-21 20:37:02的发言:

我看错了,你用的是尾插法,没毛病,我以为你用的是头插法,
还有就是我的头指针和你的意思不一样,我的头指针代表的是链表的第一个元素,
你的头指针表示的只是一个地址,记录了第一个元素的地址,并不参与运算,而我的直接参与运算。(这就是你东西多出来的原因还是一大串数字的原因)。

pdate linkcre(void)
{
    pdate head,pfirst,psecond;
    tdate cr[8]=
    {
        {10,10,2000},{11,11,2012},{05,05,2005},{01,01,2006},{12,30,2016}
        ,{01,01,2005},{02,02,2008},{03,03,2009}
    };
    pfirst=(pdate)malloc(sizeof(tdate)); //多出来的就在这里,你并没有给这里赋值 所以就是一个随机值,你链表反转操作的这里了----------------------------------------------------------
    head=pfirst;
    psecond=pfirst;
    int i;
    for(i=0;i
那应该怎么办呢  是给head一个空值 还是给一个NULL

DO IT YOURSELF !
2017-03-21 21:02
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
收藏
得分:0 
回复 14楼 wp231957
你的退出条件在于对pHead的判断,而不是指针为空,总之反转之前记录的pHead是你退出的条件。

你pHead->next = 你链表的第一个元素,判断条件就在这里,当你逆序时的指针等于pHead->next就是你退出的条件
2017-03-21 21:09
快速回复:链表插入操作案例测试给大家参考下
数据加载中...
 
   



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

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