//合并两个有序链表
void merge(SeqList *LA,SeqList *LB,SeqList *LC)
{
int i=0 ,j=0, k=0;
while(i<=LA->last&&j<=LB->last)
{
if(LA->elem[i]>=LB->elem[j])
{
LC->elem[k]=LB->elem[j];j++;k++;
}
else
{ LC->elem[k]=LA->elem[i];i++;k++;}
}
while(i<=LA->last)
{LC->elem[k]=LA->elem[i];i++;k++
}
while(j
{LC->elem[k]=LB->elem[j];j++;k++}
}
#include
struct node {
int value;
struct node * next;
};
typedef struct node Node;
typedef struct node *ptrList,*List;
void create(Node *&T);
void sort(Node *T);
void PrintNode(ptrList V);
ptrList MergeSortedList(List A,List B);
//建立链表
void create(Node *&T)
{
Node *p,*tmp; //插入的指针
int n;
if(T==NULL)
{
T = new Node;//申请一个头结点
T->value = 0;
T->next = NULL;
}
p = T;
cin>>n;
for(int i=0;i
tmp = new Node;//申请一个结构类
cin>>tmp->value; //输入一个数值
tmp->next = NULL; //插入一个节点
p->next = tmp;
p = tmp;
}
}
//排序
void sort(Node *T)
{
Node *p,*tmp; //插入的指针
int n;
if(T==NULL || T->next == NULL) return ;
p = T->next;
for(p=T->next;p!=NULL;p=p->next)
for(tmp=p->next;tmp!=NULL;tmp=tmp->next)
{
if(p->value>tmp->value)
{
n = tmp->value;
tmp->value = p->value;
p->value = n;
}
}
}
//归并
ptrList MergeSortedList(List A,List B)
{
if(A == NULL || B == NULL)
{
return NULL;
}
Node *pa = A->next;
Node *pb = B->next;
A->next = NULL;
delete B;
Node *tmp1 = A;
Node *tmp2;
while((pa != NULL) && (pb != NULL))
{
if(pa->value < pb->value)
{
tmp2 = pa;
pa = pa->next;
tmp1->next = tmp2;
tmp1 = tmp2;
}
else
{
tmp2 = pb;
pb = pb->next;
tmp1->next = tmp2;
tmp1 = tmp2;
}
}
if((pa == NULL)&&(pb != NULL))
{
tmp1->next = pb;
}
if((pb == NULL)&&(pa != NULL))
{
tmp1->next = pa;
}
return A;
}
//输出
void PrintNode(ptrList V)
{
List tmp ;
if(!V||!V->next)
{
cout<<"NULL"<
}
tmp = V->next;
while(tmp->next)
{
cout<
tmp = tmp->next;
}
cout<
}
int main()
{
List La=NULL,Lb=NULL;
ptrList Lc;
create(La);
create(Lb);
sort(La);
sort(Lb);
PrintNode(La);
PrintNode(Lb);
Lc = MergeSortedList(La,Lb);
PrintNode(Lc);
return 0;
}
两个地址连起来