第十一题 - 数据结构(队列) - 按组反转一个队列
本节目录
题目要求
在操作系统的任务调度优先级处理过程中,当某些任务队列需要按相反的顺序处理时,可以使用任务队列的反转操作来实现。
给定一个任务队列,按每 𝑘 个节点一组进行翻转,返回修改后的队列。这里的 k 是一个正整数,并且小于或等于队列的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。不能只是单纯地改变节点内部的值,而是需要实际进行节点交换。
你需要实现一个函数 reverse_task_queue_by_group,该函数用于按组(k)反转一个任务队列。
示例
假设我们有一个任务队列:
原始队列:1 -> 2 -> 3 -> 4 -> 5
调用 reverse_task_queue_by_group(head,2) 后,返回的新队列应该是:
反转后的队列:2 -> 1 -> 4 -> 3 -> 5
输入
一组任务 id 组成的队列,由 , 分割,比如 1,2,3,4,5
输出
打印反转后的任务队列
Reversed queue: 2 1 4 3 5
已有代码介绍
任务队列的节点由以下结构体表示:
typedef struct TaskNode {
int task_id;
struct TaskNode *next;
} TaskNode;
提示
- 类似于“滑动窗口”,多维护一个指针,用于记录窗口的开始和末尾。
- 在原地操作即可,不需要申请新的内存空间。
- 先读懂框架,再做题!
注意事项
- 确保在原地进行操作
- 确保对最后一部分的不足 k 的子队列的处理
- 确保不是值操作而是对指针操作