#include <iostream>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void creatLinkList(LinkList &head,int len){//尾插法
head=new LNode;
head->next=NULL;
LinkList rear=head;
for(int i=0;i<len;i++){
LinkList node=new LNode;
cin>>node->data;
node->next=NULL;
rear->next=node;
rear=node;
}
}
void mergeSort(LinkList h1,LinkList h2,LinkList &h3){//就是归并排序的一趟排序
h3=new LNode;h3->next=NULL;
LinkList p1=h1->next,p2=h2->next,rear=h3;
while(p1&&p2){
LinkList p=new LNode;
if(p1->data<=p2->data)
p->data=p1->data,p1=p1->next;
else
p->data=p2->data,p2=p2->next;
p->next=NULL;
rear->next=p;
rear=p;
}
//下列两个循环只会执行一个
while(p1){
LinkList p=new LNode;
p->data=p1->data;
p->next=NULL;
rear->next=p;
rear=p;
p1=p1->next;
}
while(p2){
LinkList p=new LNode;
p->data=p2->data;
p->next=NULL;
rear->next=p;
rear=p;
p2=p2->next;
}
}
void showLinkList(LinkList head){
LinkList p=head->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
puts("");
}
int main(){
LinkList h1,h2,h3;
creatLinkList(h1,5);//创建第一个有序单链表
creatLinkList(h2,5);//创建第二个有序单链表
mergeSort(h1,h2,h3);
showLinkList(h3);
}
【C++】设计将两个有序单链表合并成一个单链表并保持有序的算法
最新推荐文章于 2024-08-13 15:05:22 发布