合并两个有序的单链表,并使合并后的单链表保持有序
#include <iostream>
using namespace std;
/*
*writer:yaojinhui
*/
using namespace std;
typedef int ElemType;
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
LinkList CreateList_L(LinkList &L,ElemType R[])///头插法建立不带头结点的链表
{
LinkList p;
int i=2;
L=NULL;
while(i>=0)
{
p=(LinkList)malloc(sizeof(LNode));
p->data =R[i];
p->next =L;
L=p;
i--;
}
return L;
}
//链表遍历
void Display(LinkList L)
{
// LinkList p;
// p = L;
while (L)
{
cout<<L->data<<" ";
L = L->next;
}
cout << endl;
}
LinkList merge(LinkList L1,LinkList L2)
{
if(!L1)
return L2;
if(!L2)
return L1;
LinkList L;
LNode *p1,*p2;
if(L1->data<L2->data)
{
L=L1;
p1=L1->next;
p2=L2;
}
else
{
L=L2;
p2=L2->next;
p1=L1;
}
LNode *move;
move=L;
while(p1&&p2)
{
if(p1->data<p2->data)
{
move->next=p1;
move=p1;
p1=p1->next;
}
else
{
move->next=p2;
move=p2;
p2=p2->next;
}
}
if(p1)
move->next=p1;
if(p2)
move->next=p2;
return L;
}
int main()
{
LinkList L,L1,L2,L3;
L3=NULL;
ElemType R1[] = { 1, 3, 5 };
ElemType R2[] = { 2, 4, 6 };
CreateList_L(L1,R1);
CreateList_L(L2,R2);
Display(L1);
Display(L2);
L=merge(L1,L2);
Display(L);
return 0;
}