实现两个有序链表的合并

实现两个链表的合并


编译环境Vc 6.0

///////----------a.cpp

#include <iostream>
#include "a.h"
using namespace std;
void ListAdd(LinkList<int> *List1,LinkList<int> *List2,LinkList<int> *List3);
void Print(const int &c)
{
cout<<c<<" ";
}


int main()
{


    LinkList<int> List1;
LinkList<int> List2;
LinkList<int> List3;
int i=0,j=0;
int m,n;
    while(i<5)
    {
cin>>m;
        List1.Append(m);
i++;
}
while(j<5)
    {
cin>>n;
        List2.Append(n);
j++;
}
    /*List1.Traverse(Print);
List2.Traverse(Print);*/


ListAdd(&List1,&List2,&List3);   ////////----------函数调用,实参传的是链表的地址????
List3.Traverse(Print); 
return 0;
}




void ListAdd(LinkList<int> *List1,LinkList<int> *List2,LinkList<int> *List3)/////--------函数实现,虚参为指针,指向链表的首地址
{
////函数实现部分,定义三个LinkNode指针
LinkNode<int> *p=List1->head->next,*q=List2->head->next;
LinkNode<int> *s=List3->head;
while(p!=NULL&&q!=NULL)
{
if((p->data)<(q->data))
{
s->next=p;
s=p;
p=p->next;
}
else
{
s->next=q;
s=q;
q=q->next;
}
} //////----------两个有序链表的合并部分
if(p)
{
s->next=p;
}
if(q)
{
s->next=q;
} ///////-----------如果上面的while部分结束,还有链表元素剩余,可以直接剩下的元素


}


template <class ElemType>

struct LinkNode
{
    ElemType data;
    LinkNode<ElemType> *next;


};



///////////----------a.h

template <class ElemType>
class LinkList
{


//类成员都为公有,便于类体外函数的访问
public :
    int len;
    LinkNode<ElemType> *head;
    LinkNode<ElemType> *tail;


    LinkList();


    bool Append(ElemType &e);
    void Traverse(void (*visit)(const ElemType &e)) const;  ////------注意此遍历函数




//void ListAdd(LinkList<ElemType> *List1,LinkList<ElemType> *List2,LinkList<ElemType> *List3);
};


template <class ElemType>
LinkList<ElemType>::LinkList()
{
    len=0;
    head=tail=new LinkNode<ElemType>;
    head->next=NULL;
}


template <class ElemType>
bool LinkList<ElemType>::Append(ElemType &e)
{
    LinkNode<ElemType> *q;
    q=new LinkNode<ElemType>;
    q->data=e;
    tail->next=q;
    tail=q;
    tail->next=NULL;
    len++;
    return true;
}


template <class ElemType>
void LinkList<ElemType>::Traverse(void (*visit)(const ElemType &e)) const
{
LinkNode<ElemType> *p=head->next;
while(p)
{
visit(p->data);
p=p->next;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值