main.cpp
#include <iostream>
#include "LinkList.h"
using namespace std;
int main()
{
Linklist La,Lb,Lc;
int n1,n2;
La=(Linklist)malloc(sizeof(Lnode));
La->next=NULL;
printf("******两个单链表的合并操作******\n");
printf("\n请输入要建立的链表La的长度:");
scanf("%d",&n1);
creatlist_L(La,n1);
printf("\n******输出链表La中元素******\n");
traverlist_L(La);
Lb=(Linklist)malloc(sizeof(Lnode));
Lb->next=NULL;
printf("******两个单链表的合并操作******\n");
printf("\n请输入要建立的链表Lb的长度:");
scanf("%d",&n2);
creatlist_L(Lb,n2);
printf("\n******输出链表Lb中元素******\n");
traverlist_L(Lb);
printf("\n******下面执行合并操作******\n");
if(La->data>Lb->data){
Lc=Lb;
}else
Lc=La;
mergelist_L(La,Lb,Lc,n2);
printf("\n******输出由链表La和Lb归并所得新的链表Lc中的元素******\n");
traverlist_L(Lc);
return 0;
}
linklist.h
#include <stdio.h>
#include<malloc.h>
#define NULL 0
using namespace std;
typedef int Elemtype;
typedef struct Lnode{
Elemtype data;
struct Lnode *next;
}Lnode,*Linklist;
//使用尾插法创建单链表
void creatlist_L(Linklist L,int n)
{
int i;
Linklist p,q;
q=L;
for(i=1;i<=n;i++)
{
p=(Linklist)malloc(sizeof(Lnode));
printf("输入线性表的第%d个元素:",i);
scanf("%d",&p->data);
p->next=q->next;
q->next=p;
q=q->next;
}
}
//使用头插法创建单链表
//void creatlist_L0(Linklist L,int n)
//{
// int i;
// Linklist p,q;
// q=L;
// for(i=1;i<=n;i++){
// p=new Lnode;
// if(!p) exit(-2);
// cout<<"enter element"<<endl;
// cin>>p->data;
// p->next=q->next;
// q->next=p;
//
// }
//
//
//}
void traverlist_L(Linklist head)
{
Linklist p;
printf("以head 为头指针的单链表中的元素为:");
p=head->next;
while(p!=NULL){
printf("%5d ",p->data);
p=p->next;
}
printf("\n");
if(head->next==NULL){
cout<<"empty"<<endl;
}
}
//查找第i个位置的元素,找到后赋值给e
void Getelem(Linklist L,int i,Elemtype &e,int n)
{
int j;
Linklist p;
p=L;
if(i>n){
cout<<"位置越界"<<endl;
exit(0);
}
//未越界
for(j=1;j<=i;j++){
p=p->next;
}
e=p->data;
}
void Listdelete(Linklist &L,int i)
{
int j;
Linklist p,q;
p=q=L;
for(int j=1;j<i;j++){
p=p->next;
q=p->next;
}
q=q->next;
p->next=q->next;
free(q);
}
void mergelist_L(Linklist La,Linklist Lb,Linklist Lc,int lb)
{
int i;
Linklist pb,q,pc;
pb=Lb->next;
pc=Lc->next;
for(i=0;i<lb;i++){
q=new Lnode;
if(!q) exit(-2);
q->data=pb->data;
if(pc->data<pb->data){
q->next=pc->next;
pc->next=q;
}
pb=pb->next;
pc=pc->next;
}
cout<<"mergelist"<<endl;
}