各位英雄好!小弟有一个问题要请教,请多多指点! 下面的程序是一个将两个单链表合成一个单链表的程序,其中要合并的两个单链表中的元素是按非递减排列,合并后链表也是按非递减排列; 我的程序的可以通过,而且还有结果输出,但就是结果不符,请各位高手帮忙看看其中出了什么问题,多谢! 个人QQ:455904362 E-mail: fyxeainnn@163.com #include"stdio.h" #include"stdlib.h" #include"iostream.h" #define ok 1 #define NULL 0
typedef int datatype; typedef struct node * pointer;
typedef struct node { datatype data; pointer next; }lnode;
pointer initlist() //初始化链表 { pointer l; l=(pointer)malloc(sizeof(lnode)); l->next=NULL; return l; }
pointer create_list() //创建链表 { pointer head,p,q; datatype x; head=(pointer)malloc(sizeof(lnode)); p=head; cout<<"请从小到大输入链表的元素,输入0则结束:\n"; cin>>x; while(x!=0) { q=(pointer)malloc(sizeof(lnode)); q->data=x; p->next=q; p=q; cout<<"please input a number:\n"; cin>>x; } p->next=NULL; return head; }
void print_list(pointer head) //输出链表中的元素 { pointer p; p=head->next; while(p!=NULL) { cout<<p->data<<"\t"; p=p->next; } cout<<endl; }
pointer find_list(pointer head,int i) //查找链表中指定位置的元素 { pointer p; p=head; int j=0; while((p->next!=NULL)&&(j<i)) { p=p->next; j++; } if(j==i) return p; else return NULL; }
void insert_list(pointer head,datatype x,int i) //在链表中插入元素 { pointer p; p=find_list(head,i-1); if(p==NULL) { cout<<"Error!\n"; } else { pointer s; s=(pointer)malloc(sizeof(lnode)); s->data=x; s->next=p->next; p->next=s; } }
datatype getelem(pointer head,datatype x,datatype &e) //将链表中的元素用E返回 { pointer p; p=head->next; int i=1; while((p!=NULL)&&(i<x)) { p=p->next; ++i; } if(!p&&i>x) cout<<"不存在第i个位置元素!\n"; return 0; e=p->data; return e; }
datatype length_list(pointer head) //求链表的长度 { int i=0; pointer p; p=head; while(p->next!=NULL) { p=p->next; i++; } return i; }
pointer combination_list(pointer A,pointer B,pointer C)//将链表A,B合成链表C,C中的元素仍按非递减排列 {
int i=1,j=1,k=0; int A_len=length_list(A); int B_len=length_list(B); int ai,bj; while((i<=A_len)&&(j<=B_len)) { getelem(A,i,ai); getelem(B,j,bj); if(ai<=bj) { insert_list(C,ai,++k); ++i; } else { insert_list(C,bj,++k); ++j; } } while(i<=A_len) { getelem(A,ai,++i); insert_list(C,ai,++k); } while(j<=B_len) { getelem(B,bj,++j); insert_list(C,bj,++k); } return C; }
void main() { pointer Alist,Blist,Clist,Dlist; Clist=initlist(); Dlist=initlist(); cout<<"请输入链表A的元素:\n"; Alist=create_list(); //链表A中的元素按非递减排列 print_list(Alist);
cout<<"\n请输入链表B的元素:\n"; Blist=create_list(); //链表A中的元素按非递减排列 print_list(Blist);
Dlist=combination_list(Alist,Blist,Clist); print_list(Dlist); cout<<endl; }