链表和顺序表习题(一)
来源:互联网 发布:怎么查看手机mac地址 编辑:程序博客网 时间:2024/04/30 01:33
1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用?
2.从尾到头打印单链表
- 递归法,最后一个节点最先打印
void PrintListFromTailToHead_R(ListNode* head) { if (head) { if (head->next) PrintListFromTailToHead_R(head->next); cout << head->val << " "; } }
3.删除一个无头单链表的非尾节点
因为不知道链表的头节点,所以不能直接常规删除(找到要删除的节点位置直接删除),将所要删除的节点A之后一个节点B数据与A数据交换,然后删除交换后的B节点。如图,图中,要删除数为3的节点,先将存有数据3、4的节点中的数据进行交换,然后删除交换后的节点(绿色框中的存有数据3的节点):
4.在无头单链表的一个节点A前插入一个节点 B
和问题3中的一样,不知道头节点,不能用常规头插,将问题中的头插变为尾插,插入之后与节点A的数据进行交换,就基本完成了无头单链表头插的要求
5.单链表实现约瑟夫环
约瑟夫环:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
解法:用一个计数器实现约瑟夫计数机制,将链表的尾与头衔接,依次删除节点,所剩最后一个节点时,就是要求的节点
6.逆置/反转单链表
给一个新的链表的头(Newlist == NULL):用两个指针,一个指向目标链表的头(mov),另一个用来保存 mov 后面一个节点的地址(sto)。在保存 sto 之后,将 mov 指向的节点摘出来头插在新链表头前面(Newlist),Newlist 指向当前头插后的新链表的头,依次循环上述步骤头插,直到目标链表 list 被遍历完。
7.单链表排序(冒泡排序&快速排序)
冒泡排序或快速排序,交换的是节点中的数据。
8.合并两个有序链表,合并后依然有序
创建新链表(Newlist),比较两个目标链表的头节点中的数据,摘出其中较小者(若相等规定取其一)对 Newlist 尾插,依次遍历两个目标链表,直到其中一个遍历完成,将另一个所剩节点衔接在新链表之后。
9.查找单链表的中间节点,要求只能遍历一次链表
快慢指针(fast、slow),fast 每次走两个节点,slow 每次走一个节点,在快指针遍历完的时候,慢指针刚好走了一半。此时,慢指针所指节点为中间节点
10.查找单链表的倒数第k个节点,要求只能遍历一次链表
快慢指针(fast、slow),fast 与 slow 每次都走一个节点,但是 fast 比 slow 先走 k 个节点,这样,快慢指针直接总是隔开 k 个节点,在 fast 遍历完之后,slow 所指节点为单链表倒数第 k 个节点
- 链表和顺序表习题(一)
- 链表和顺序表习题(二)
- 线性表习题一
- 双向链表习题(牛客网习题)
- 数据结构线性表习题(一)
- 线性表的顺序存储---习题
- 数据结构习题-顺序表静态查找
- 习题(字节顺序)
- C++学习(一)顺序链表
- 结构之美学习一《顺序表和链表》
- 一窥--顺序表和单链表
- 顺序线性表(一)
- 顺序表(作业一)
- 数据结构(一)顺序表2:顺序表的就地逆置和顺序表中删除元素值
- Java数据结构和算法(一)--顺序表、链表、静态链表
- 《一》 顺序表
- 数据结构(一):顺序表
- 数据结构一顺序表
- iOS 【使用 dSYM 符号集对线上 App 进行崩溃修复】
- 在Cocos2d-x项目中,如何将自己的类添加到Classes文件夹下
- @Param 注解在Mybatis中的使用 以及传递参数的三种方式
- FAFU OJ 一个简单的问题
- pmon读取一个64位寄存器值死机
- 链表和顺序表习题(一)
- 最详细的Log4j使用教程
- java.util.Hashtable源码解析
- IPC-消息队列
- View组件
- 欢迎使用CSDN-markdown编辑器
- NSIS如何编写带参数的函数
- jQuery Mobile Data 属性
- HDU 1166