链表反转头插法java_头插入法反转单链表 | 学步园

建立一个新的结点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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值