链表基础题啊...高手来啊
- 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;}