Problem 2057 --算法2-18~2-19:双向循环链表

2057: 算法2-18~2-19:双向循环链表

"
Time Limit $1$ 秒/Second(s) Memory Limit $512$ 兆字节/Megabyte(s)
提交总数 $17$ 正确数量 $10$
裁判形式 标准裁判/Standard Judge 我的状态 尚未尝试
难度 分类标签
双向链表是在结点中既保存了后一个结点指针又保存了前一个结点指针的链表。这种链表较单向链表而言能够快速查找某一结点的前后结点。下面给出双向链表的定义、插入以及删除算法描述。
图1:双向链表示例
(a)结点结构;(b)空的双向循环链表;(c)含有三个结点的双向循环链表
图2:双向链表的定义以及创建
双向链表在插入与删除时一定要注意其操作步骤的顺序。下面给出双向链表在插入与删除时的图示。
图3:双向链表插入与删除的图示
(a)双向链表的删除操作;(b)双向链表的插入操作
图4:双向链表的查找以及插入
图5:双向链表的删除操作

输入数据只有一组,包含很多行。每行有1~3个整数。第一个整数如果是0,则表示输出双向链表中的所有元素;第一个整数如果是1,表示插入1个整数,其后跟2个整数i、e代表在第i个位置插入e;第一个整数如果是2,表示删除1个整数,其后跟1个整数i,表示删除的位置为i。
起始双向链表为空表。保证链表中每个元素不会重复,同时所有的操作都合法。

当需要输出双向链表中的所有元素时输出,每次输出一行。整数间用一个空格隔开。

1 1 2
0
1 2 7
0
2 1
0
1 2 4
1 3 5
1 2 6
0
2 3
0
2
2 7
7
7 6 4 5
7 6 5
提示:
1、如果使用switch,注意每个case后面使用break。
2、结构体定义时,因为定义里面有用到这个类型的指针,所以需要在开始struct后面写上结构体名。
3、注意循环链表全部遍历结束的条件是遍历的指针是否又指向了头结点。
总结:
1、双向链表的重要之处在于插入和删除时的操作顺序,切勿弄乱顺序而丢失数据。
2、循环链表全部遍历的结束条件需要注意,不是非空,而是判断是否到头结点了。
本题考查的是双向循环链表,所以上述都需要注意。

推荐代码 查看2057 所有题解 上传题解视频得图灵币

本题记录 用 户(点击查看用户) 运行号(点击购买题解) 时 间
算法最快[$0 $ms] sqrjy 607525 2020-07-16 21:37:03
内存最少[$944 $KB] 范晋豪@信息与计算科学142 152661 2017-11-16 15:10:12
第一AC 范晋豪@信息与计算科学142 152660 2017-11-16 15:10:12
第一挑战 范晋豪@信息与计算科学142 152660 2017-11-16 15:10:12

赛题来源/所属竞赛 数据结构高分笔记 数据结构高分笔记

竞赛编号 竞赛名称 竞赛时间 访问比赛