编写函数实现单链表类LinList的对象B连接到单链表类LinList的对象A的尾部:Void Concatenate(LinList& A, LinList& B)。
能告诉我方法思路吗
#include<iostream.h>
#include<stdio.h>
template<class T>class LinList; //前视定义,否则,无法定义友元
template<class T>class ListNode
{
friend class LinList<T>; //定义友元
private:
ListNode<T> *next; //指向下一个结点的指针
public:
T data;
ListNode(ListNode<T> *ptrNext = NULL); //构造函数,用于构造头结点
ListNode(const T& item,ListNode<T> *ptrNext = NULL);//构造函数,非头结点
~ListNode(){}; //析构函数
};
template<class T>
ListNode<T>::ListNode(ListNode<T> *ptrNext):next(ptrNext)
{}
template<class T>
ListNode<T>::ListNode(const T &item,ListNode<T> *ptrNext)
{
data=item;
next=ptrNext;
};
#include "ListNode.h"
template<class T>
class LinList
{
private:
ListNode<T> *head; //指向头结点的指针
int size; //单链表的元素个数
ListNode<T> *currPtr; //当前结点
public:
LinList(void); //构造函数
~LinList(void); //析构函数
int ListSize(void) const; //返回链表的元素个数
int ListEmpty(void) const; //判断链表是否为空
ListNode<T> *Index(int pos); //定位
void Insert(const T& item,int pos); //插入
T Delete(int pos); //删除
T GetData(int pos); //取元素
void ClearList(void); //清空链表
//遍历单链表函数
ListNode<T> *Reset(int pos=0); //把第pos个结点设置为当前结点currPtr
ListNode<T> *Next(void); //currPtr指向下一个结点
int EndOfList(void) const; //currPtr是否指在链表尾
};
template<class T>
LinList<T>::LinList() //构造函数
{
head=new ListNode<T>();
size=0;
}
template<class T>
LinList<T>::~LinList(void) //析构函数
{
ClearList();
delete head;
}
template<class T>
int LinList<T>::ListSize(void) const //返回链表的个数
{
return size;
}
template<class T>
int LinList<T>::ListEmpty(void) const //判断是否为空
{
if(size<=0)return 1;
else return 0;
}
template<class T>
ListNode<T> *LinList<T>::Index(int pos) //定位,返回指向第pos个结点的指针
{
if(pos<-1||pos>size)
{
cout<<"参数pos越界出错!"<<endl;
exit(0);
}
if(pos==-1)return head;
ListNode<T> *p=head->next;
int i=0;
while(p!=NULL&&i<pos)
{
p=p->next;
i++;
}
return p;
}
template<class T>
void LinList<T>::Insert(const T& item,int pos)
//在pos个结点之前插入一个data域为item的新结点
{
if(pos<0||pos>size)
{
cout<<"参数pos越界出错!!!"<<endl;
exit(0);
}
ListNode<T> *p=Index(pos-1);
ListNode<T> *newNode=new ListNode<T>(item,p->next);
p->next=newNode;
size++;
}
template<class T>
T LinList<T>::Delete(int pos) //删除第pos个结点,并返回被删除结点的data
{
if(pos<0||pos>size-1)
{
cout<<"参数pos越界出错!!"<<endl;
exit(0);
}
ListNode<T> *q,*p=Index(pos-1);
q=p->next;
p->next=p->next->next; //第pos个接点脱节
T data=q->data; //保存
delete q; //释放空间
size--;
return data;
}
template<class T>
T LinList<T>::GetData(int pos)
{
if(pos<0||pos>size-1)
{
cout<<"参数pos越界出错!!"<<endl;
exit(0);
}
ListNode<T> *p=Index(pos);
return p->data;
}
template<class T>
void LinList<T>::ClearList(void) //清空表为初始化状态
{
ListNode<T> *p,*p1;
p=head->next;
while(p!=NULL)
{
p1=p;
p=p->next;
delete p1;
}
size=0;
}
template<class T>
ListNode<T> *LinList<T>::Reset(int pos) //把第pos个结点设置为当前结点currPtr
{
if(head==NULL)return NULL;
if(pos<-1||pos>=size)
{
cout<<"参数出错!"<<endl;
exit(0);
}
if(pos==-1) return head;
if(pos==0) currPtr=head->next;
else
{
currPtr=head->next;
ListNode<T> prevPtr=head;
for(int i=0;i<pos;i++)
{
prevPtr=currPtr;
currPtr=currPtr->next;
}
}
return currPtr;
}
template<class T>
ListNode<T> *LinList<T>::Next(void) //currPtr指向下一个结点
{
if(currPtr !=NULL) currPtr=currPtr->next;
return currPtr;
}
template<class T>
int LinList<T>::EndOfList(void) const //currPtr是否指在链表尾
{
if(currPtr==NULL)return 1;
else return 0;
}
怎么在主函数中编该函数呢,我想了很久了,谢谢各位