//链式线性表的 创建,查找,删除,插入,合并操作
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void CreatList(LinkList &L,int n){
L=(LinkList) malloc(sizeof(LNode));
LinkList q=L;
for(int i=0;i<n;i++){
LinkList p=(LinkList) malloc(sizeof(LNode));
scanf("%d",&(p->data));
q->next=p;
q=p;
q->next=NULL;
}
}
void ShowList(LinkList L){
LinkList q=L->next;
while (q!=NULL){
cout<<(q->data)<<" ";
q=q->next;
}
cout<<endl;
}
int GetElem_L(LinkList L,int i,int &e){ //根据序号查找
int j=1;
LinkList p=L->next;
while (j<i&&p!=NULL)
{
p=p->next;
j++;
}
if(j>i||p==NULL){
cout<<"error"<<endl;
return 0;
}else{
e=p->data;
return 1;
}
}
int ListInsert(LinkList &L,int i,int e){
LinkList p=L;
int j=1;
while (j<i&&p->next!=NULL){
p=p->next;
j++;
}
if(j>i||p->next==NULL){
cout<<"error"<<endl;
return 0;
}else {
LinkList q=(LinkList)malloc (sizeof (LNode));
q->data=e;
q->next=p->next;
p->next=q;
return 1;
}
}
int ListDelete(LinkList &L,int i,int &e){
LinkList p=L;
int j=1;
while(j<i&&p->next!=NULL){
p=p->next;
j++;
}
if(j>i||p->next==NULL){
cout<<"error"<<endl;
return 0;
}else
e=p->next->data;
p->next=p->next->next;
return 1;
}
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){
LinkList pa,pb,pc;
Lc=(LinkList)malloc(sizeof(LNode));
pc=Lc;
pa=La->next;
pb=Lb->next;
while(pa!=NULL&&pb!=NULL){
if(pa->data < pb->data){
pc->next=pa;
pc=pa;
pa=pa->next;
}else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
if(pa){
pc->next=pa;
}else{
pc->next=pb;
}
free(La);
free(Lb);
}
int main()
{
LinkList La,Lb,Lc;
int n;
cin>>n;
CreatList(La,n);
CreatList(Lb,n);
//CreatList(Lc,2*n);
//Lc=(LinkList)malloc(sizeof(LNode));
//ShowList(La);
//ShowList(Lb);
/* int get;
if(GetElem_L( L,2,get))
cout<<get<<endl;*/
//int ins=100;
// if( ListInsert(L,2,100) ){
// ShowList(L);
// }
// int del;
// if( ListDelete( L,4,del) ){
// ShowList(L);
// cout<<del<<endl;
// }
MergeList(La,Lb,Lc);
ShowList(Lc);
return 0;
}
链式线性表