标题:链表插入操作案例测试给大家参考下
只看楼主
烟雨晨曦
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: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册: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: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-475202-1-1.html




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

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