读书人

链表基础题啊高手来啊该怎么处理

发布时间: 2012-03-29 12:53:13 作者: rapoo

链表基础题啊...高手来啊

C/C++ code
/*假设有两张按元素值递增次序的排列链表,均以单链表形式存储。请编写算法,将这两张单链表合并成为一个按元素值递减的单链表,要求保留原来的两个单链表合并后用新单链表表存储*/# include<iostream>#include<malloc.h>using namespace std;struct pailie{    int zhi;    struct pailie* next;}; void dingyi(struct pailie* &L,int n)//初始化函数{    pailie *p;    L=(struct pailie*)malloc(sizeof(pailie));    L->next=NULL;    for(int i=0;i<n;i++)    {        p=(struct pailie*)malloc(sizeof(pailie));        cin>>p->zhi;        p->next=L->next;        L->next=p;    }}char bijiao(int pa,int pb)//比较函数{    if((pa)==(pb))return '=';    if((pa)>(pb))return '>';    if((pa)<(pb))return '<';}void hebing(struct pailie*p,struct pailie*q,struct pailie *&L)//合并函数{    pailie *a,*b,*pa,*pb;    L=(struct pailie*)malloc(sizeof(pailie));//定义头结点    L->next=NULL;    pa=p->next;    pb=q->next;    while(pa&&pb)    {        switch(bijiao(pa->zhi,pb->zhi))        {        case '=':            {a=(struct pailie *)malloc(sizeof(pailie));             a->next=L->next;             a->zhi=pa->zhi;             L->next=a;             pa=pa->next;             b=(struct pailie *)malloc(sizeof(pailie));             b->next=L->next;             b->zhi=pb->zhi;             L->next=b;             pb=pb->next;break;}        case '<':            {a=(struct pailie *)malloc(sizeof(pailie));             a->zhi=pa->zhi;             a->next=L->next;             L->next=a;             pa=pa->next;break;}        case '>':            {a=(struct pailie *)malloc(sizeof(pailie));             a->next=L->next;             a->zhi=pb->zhi;             L->next=a;             pb=pb->next;break;}        }    }    if(!pa)//pa还有节点    {        while(!pb)        {           a=(struct pailie *)malloc(sizeof(pailie));           a->zhi=pb->zhi;           pb=pb->next;           a->next=L->next;           L->next=a;        }    }    if(!pb)//pb还有节点    {        while(!pa)        {            a=(struct pailie *)malloc(sizeof(pailie));            a->zhi=pa->zhi;            pa=pa->next;            a->next=L->next;            L->next=a;        }    }    }void shuchu(struct pailie *L)//输出函数{ pailie *a;  a=L->next;  while(a)  {      cout<<a->zhi<<"  ";      a=a->next;  }  cout<<endl;}int main(){    pailie *L,*p,*q;    int n,m;    cout<<"输入p节点的个数和值"<<endl;    cin>>n;    dingyi(p,n);    cout<<"输入q节点的个数和值"<<endl;    cin>>m;    dingyi(q,m);    hebing(p,q,L);    cout<<"输出p"<<endl;    shuchu(p);    cout<<"输出q"<<endl;    shuchu(q);    cout<<"输出L"<<endl;    shuchu(L);    return 0;}


合并函数出问题,我不知道哪出问题...各位找找...

[解决办法]
先遍布两个链表的元素,按小到大把值插入到一个新的单链表里,最后对这个单链表进行逆序
[解决办法]
C/C++ code
    L=(struct pailie*)malloc(sizeof(pailie));    L->next=NULL;    q=L;    for(int i=0;i<n;i++)    {        p=(struct pailie*)malloc(sizeof(pailie));        cin>>p->zhi;        q->next=p;        q=p;    }    q->next=NULL;} 

读书人网 >C++

热点推荐