您的位置:首页 > 其它

链表反转

2016-05-19 21:07 155 查看
题目链接

PAT提交结果

PAT提交代码

github链接

主要步骤以及特别注意事项:



先构造一个结构体,内有成员
address
data
nextad
,分别代表当前结点的地址,结点存储的数据,和下一个结点的地址。

创建头指针,输入数据,按照输入的数据,新建结点,先把输入的结点构成一个链表。特别注意:由于输入数据的次数可能较多,为了避免超时,建议用
scanf
输入。

把所成的链表结点按照地址进行排序。

特别注意:由于输入的结点可能会有不满足要求的,应把它们移除链表,即结点的
nextad
如果是
-1
,那么它的下一个应指向
NULL


根据
k
的大小,对链表进行反转。

反转后,再把各结点的
nextad
进行重新赋值,使其等于下一个结点的
address
。特别注意:最后一个节点的
nextad
应该设为
-1


最后输出各个节点。特别注意:由于输入的地址是五位整型数,所以如果地址的有效数字的位数比五小,就会使输出的地址与原来不同。

比如:输入
00001 123 03241
,那么输出就会变成
1 123 3241
,就会出错。应该在输出时控制输出的宽度为五位,并且不足的要补
0


可以用
cout<<setfill('0')<<setw(5)<<地址
来实现,要记得加上
#include<iomanip>
。但是最后一个地址
-1
应该单独输出,不必补
0




补充:



在使用指针时,如果一个指针被多次使用,在使用前,一定要把指针重新指向。

在搜索结点时,一定要记住加上指针的后移操作。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: