合并两个非递减链表

#include<iostream.h>
#include<stdlib.h>
#define LIST_INIT_SIZE       100
#define OK      1
#define OVERFLOW    -2
#define ERROR   0
typedef int Status;

typedef int ElemType;
typedef struct LNode
{
    ElemType  data;     //数据域
    struct LNode  *next;       //指针域
}LNode,*LinkList;

Status InitList_L(LinkList &L)
{
    //构造一个空的链表
    L=new LNode;
    if(!L)
        exit(OVERFLOW);
    L->next=NULL;
    return OK;
}//InitList_L

void CreateList_L(LinkList &L,int n)
{
    //正序输入n个数据元素,建立带头结点的单链表
    LNode *p;
    LinkList S;
    L=new LNode;
    L->next=NULL;
    S=L;       //建立带头结点/尾指针的单链表
    for(int i=1;i<=n;++i)
    {
        p=new LNode;
        cin>>p->data;        //输入元素值
        p->next=S->next;
        S->next=p;
        S=p;   //插入
    }
}//CreateList_L

void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc)
{
    //归并La,Lb得到单链表Lc,Lc的元素非递减排列
    LNode *pa,*pb,*pc;
    pa=La->next;
    pb=Lb->next;    //p指向第一个结点
    Lc=pc=La;
    while(pa && pb)
    {
        if(pa->data<=pb->data)
        {
            pc->next=pa;
            pc=pa;
            pa=pa->next;
        }
        else
        {
            pc->next=pb;
            pc=pb;
            pb=pb->next;
        }
        pc->next=pa?pa:pb;
    }
}//MergeList_L

void visit_L(LinkList L)
{
    LNode *p=L->next;
    while(p)
    {
        cout<<p->data<<"  ";
        p=p->next;
    }
    cout<<endl;
}


void main()
{
    LinkList La,Lb,Lc;
    int n;
    InitList_L(La);
    cout<<"input La n=";
    cin>>n;
    CreateList_L(La,n);
    visit_L(La);
    cout<<endl;

    InitList_L(Lb);
    cout<<"input Lb n=";
    cin>>n;
    CreateList_L(Lb,n);
    visit_L(Lb);
    cout<<endl;

    MergeList_L(La,Lb,Lc);
    visit_L(Lc);
}

 

posted on 2013-04-23 21:50  绕指柔yy  阅读(256)  评论(0编辑  收藏  举报

导航