合并两个单链表算法
先创建一个有2个结点单链表,按照递减顺序输入(
使用的是头插法,输入序列与输出序列顺序相反 ),然后同样创建一个8个数结点的递减单链表
最后输出合并后按非递减顺序的单链表
实现代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
#define maxSize 100
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
void merge(LNode *&A,LNode *&B,LNode *&C){
LNode *m=A->next,*n=B->next;
LNode *r;
C=A;
C->next=NULL;
free(B);
r=C;
while(m!=NULL&&n!=NULL){
if(m->data<n->data){
r->next=m;m=m->next;
r=r->next;
}else{
r->next=n;n=n->next;
r=r->next;
}
}
r->next=NULL;
if(m!=NULL) r->next=m;
if(n!=NULL) r->next=n;
};
int main(int argc, char *argv[])
{
LNode *A,*p,*p1;
LNode *B,*q,*q1;
LNode *C;
cout<<"输入2个数:";
A=(LNode *)malloc(sizeof(LNode));
A->next=NULL;
p=A;
for(int i=1;i<=2;i++){//使用的是头插法,输入序列与输出序列顺序相反
p1=(LNode *)malloc(sizeof(LNode));
cin>>p1->data;
p1->next=p->next;
p->next=p1;
}
cout<<"输入8个数:";
B=(LNode *)malloc(sizeof(LNode));
B->next=NULL;
q=B;
for(int i=1;i<=8;i++){ //使用的是头插法,输入序列与输出序列顺序相反
q1=(LNode *)malloc(sizeof(LNode));
cin>>q1->data;
q1->next=q->next;
q->next=q1;
}
merge(A,B,C);
cout<<"输出合并后的单链表:";
for(int i=1;i<=10;++i){
C=C->next;
cout<<C->data<<" ";
}
return 0;
}
输出结果:
输入2个数:9 4
输入8个数:6 5 4 3 2 2 1 0
输出合并后的单链表:0 1 2 2 3 4 4 5 6 9 请按任意键继续. . .