首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

链表有关问题,居然断炼了.

2012-07-02 
链表问题,居然断炼了....C/C++ code/*题目:前N个自然数排成一串: X1,X2,X3.....Xn,先取出x1,将x2,x3移到数

链表问题,居然断炼了....

C/C++ code
/*    题目:    前N个自然数排成一串: X1,X2,X3.....Xn,先取出x1,将x2,x3移到数串尾,            再取出x4,将x5,x6移到数串尾,....... 类推直至取完.            取出的序列恰好是:1,2,3......n.要求输入N,求原来的数串的排列方式.            例如:1,5,3,2,4,经过上述操作后,可得1,2,3,4,5。  *//*         当k=5时,会断链     ........*/# include<iostream>#include<malloc.h>using namespace std;struct L{    int zhi;    struct L *next;};void shuchu(struct L *r)  //输出函数{    while(r)    {            cout<<r->zhi<<"  ";            r=r->next;    }}int main()//主函数{    L *p,*q,*r,*t,*e;    int k;    cout<<"输入测试数值"<<endl;    cin>>k;    r=(struct L *)malloc(sizeof(L));    cin>>r->zhi;    p=r;    int i;    i=k-1;    while(i>0)    {        q=(struct L*)malloc(sizeof(L));        cin>>q->zhi;        p->next=q;             p=q;        i--;    }    p->next=NULL;    e=r;    shuchu(e);    cout<<endl;    if(k<=3)    {        shuchu(r);        return 0;    }    if(k==4)    {        t=r->next;        e=t->next;        t->next=p->next;        p->next=t;        r->next=e;        shuchu(r);        return 0;    }    /* 当k=5时会出现断链的现象,只会输出前两个数据  */    if(k==5)      {        //r为头结点,e第二个节点,t第三个,q第四个,p第五个        e=r->next;              t=e->next;        //第一次变序        p->next=t;        t->next=NULL;        e->next=q;                 //变序后 r第一个节点,e第二个,q第三个,p第四个,t最后一个节点        //第二次变续           r->next=p;        t->next=e;        q->next=NULL;        shuchu(r);            }    /*  这题我想出另一个方法,当k=5时,让r、e、t、q、p分别标记5个节点,        原序列为r、e、t、q、p。第一次变序就成为r、e、q、p、t。        第二次变序就成为 r、p、t、e、q。那么就直接按第二次的顺序一个一个输出.        这种方法行不行    */    return 0;}


[解决办法]
C/C++ code
        p->next=t;        t->next=NULL;        e->next=q; ....... 

热点排行