有n个整数,使前面各数顺序向后m个位置,最后m个数变成最前面m个数,见图 8.43。写一函数实现以上功能在主函数中输入个整数和输出调整后的n个数。
4,有n个整数,使前面各数顺序向后m个位置,最后m个数变成最前面m个数,见图 8.43。写一函数实现以上功能在主函数中输入个整数和输出调整后的n个数。
我的代码:
1.使用双向链表
void MoveDLink(DoubleList head, int m, int n) {
/* 寻找原链表第n-m个节点 */
DoubleList current = head, temp;
for (int i = 0; i < n - m; i++) {
current = current->next;
}
/* temp保存后m个数的首个数 */
temp = current->next;
/* 处理新链表尾部部分 */
current->next = NULL;
/* 找到原链表最后一个节点 */
DoubleList tail = temp;
while (tail->next) {
tail = tail->next;
}
/* 处理新链表中间衔接部分 */
tail->next = head->next;
head->next->prior = tail;
/* 处理新链表头部部分 */
head->next = temp;
temp->prior = head;
}
2.使用顺序表
void shiftArray(int arr[], int n, int m)
{
int *temp = (int *)malloc(m * sizeof(int)); // 使用动态内存分配创建临时数组
if (temp == NULL)
{
printf("内存分配失败\n");
exit(1);
}
// 将最后m个元素保存到临时数组temp中
for (int i = 0; i < m; i++)
{
temp[i] = arr[n - m + i];
}
// 向后移动前n-m个元素
for (int i = n - 1; i >= m; i--)
{
arr[i] = arr[i - m];
}
// 将临时数组中的元素放回到数组的前面
for (int i = 0; i < m; i++)
{
arr[i] = temp[i];
}
free(temp); // 释放临时数组的内存
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了