涉及到链表的建立、删除、输入、输出
链表的归并
#include<iostream>
using namespace std;
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef int Status;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList &L){ //建立一个链表
L=new LNode;
L->next=NULL;
}
void InputList(LinkList &L,int n){//链表的输入
int i;
cout<<"请输入"<<n<<"个数字:"<<endl;
LinkList p,r;
r=L;
for(i=0;i<n;i++){
p=new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
}
Status DeleteList(LinkList &L,int i,ElemType &e){//删除链表中的数字
LinkList p,q;
int j;
p=L;
j=0;
while(p->next&&j<i-1){
p=p->next;
++j;
}
if(!(p->next||j>i-1))
return ERROR;
q=p->next;
p->next=q->next;
e=q->data;
return OK;
}
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){//有序链表的归并
LinkList pa,pb,pc;
pa=La->next;
pb=Lb->next;
Lc=pc=La;
while(pa&&pb){
if(pa->data<=pb->data){
pc->next=pa;
pc=pa;
pa=pa->next;
}
else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
// free(Lb);
}
void OutputList(LinkList Lc){//链表的输入
LNode *p;
p=Lc->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
}
int main(){
LinkList La;
LinkList Lb;
LinkList Lc;
int num_a,num_b,num_c;
int number;
InitList(La);
InitList(Lb);
InitList(Lc);
cout<<"请输入链表La的个数:"<<endl;
cin>>num_a;
InputList(La,num_a);
cout<<"请输入链表Lb的个数:"<<endl;
cin>>num_b;
InputList(Lb,num_b);
int flag=0,temp;
cout<<"如果你想删除La中的数据,请输入1,"<<endl;
cout<<"如果你想删除Lb中的数据,请输入2,"<<endl;
cout<<"如不想进行删除操作,请输入0:"<<endl;
cin>>flag;
if(flag==1){
cout<<"请输入要删除的数据所在的位置:"<<endl;
cin>>number;
DeleteList(La,number,temp);
cout<<"删除的数字是"<<temp<<endl;
}
else if(flag==2){
cout<<"请输入要删除的数据所在的位置:"<<endl;
cin>>number;
DeleteList(Lb,number,temp);
cout<<"删除的数字是"<<temp<<endl;
}
MergeList(La,Lb,Lc);
OutputList(Lc);
// OutputList(La);
return 0;
}