建立一个新的结点n,从现存链表中依次取结点插入到n的后面。
template
struct Node
{
T data;
Node *next; //此处也可以省略
};
template
class LinkList
{
public:
LinkList( ); //建立只有头结点的空链表
LinkList(T a[ ], int n); //建立有n个元素的单链表
~LinkList(); //析构函数
void PrintList( ); //遍历单链表,按序号依次输出各元素
void reverse();
private:
Node *first; //单链表的头指针
};
/*
*前置条件:单链表不存在
*输 入:无
*功 能:构建一个单链表
*输 出:无
*后置条件:构建一个单链表
*/
template
LinkList:: LinkList( )
{
first=new Node; first->next=NULL;
}
/*
*前置条件:单链表不存在
*输 入:顺序表信息的数组形式a[],单链表长度n
*功 能:将数组a[]中元素建为长度为n的单链表
*输 出:无
*后置条件:构建一个单链表
*/
template
LinkList:: LinkList(T a[ ], int n)
{
first=new Node; //生成头结点
Node *r,*s;
r=first; //尾指针初始化
for (int i=0; i
{
s=new Node; s->data=a[i]; //为每个数组元素建立一个结点
r->next=s; r=s; //插入到终端结点之后
}
r->next=NULL; //单链表建立完毕,将终端结点的指针域置空
}
/*
*前置条件:无
*输 入:无
*功 能:无
*输 出:无
*后置条件:无
*/
template
LinkList:: ~LinkList()
{
}
template
void LinkList::PrintList( )
{
Node *p;
p=first->next;
while (p)
{
cout<data<
p=p->next;
}
}
template
void LinkList::reverse()
{
Node *n = new Node;
n->next = NULL;
Node *p = first->next;
while( p != NULL )
{
Node *temp = p->next;
p->next = n->next;
n->next = p;
p = temp;
}
first->next = n->next;
delete n;
n = NULL;
}
测试代码:
int main()
{
int r[ ]={1,2,3,4,5};
LinkList b(r,5); //根据数组创建单链表
b.PrintList(); //输出单链表所有元素
b.reverse();
b.PrintList();
getchar();
return 0;
}