代码拉取完成,页面将自动刷新
同步操作将从 xusun000/408-所有真题算法 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include<stdio.h>
#include<stdlib.h>
typedef struct node {
int data;
struct node* next;
} NODE;
//通过数组创建链表
void create(node* n, int length, int pos, int data[]) {
if (pos < length) {
n->data = data[pos];//赋给struct中的data
node* next = (node*)malloc(sizeof(node));//动态分配下一个节点地址
n->next = next;//对下一个节点采用递归构建
create(n->next, length, pos + 1, data);//递归,pos位置+1
}
else {
n->data = -1;//最后一个节点使用-1作为标识
}
}
void cross_sort(node* n, int length) {
//对后半部分就地逆置
node* mid = n;
node* start = n;
int i;
for (i = 0;i < length / 2;i++)mid = mid->next;//找到中间节点
//从中间开始逆置链表
node* s, * t;
s = mid->next;
mid->next = NULL;
while (s->data != -1) {
//将s节点摘下来
t = s;
s = s->next;
//将摘下来的节点头插到mid节点之后
t->next = mid->next;
mid->next = t;
}
node* tmp = mid;
mid = mid->next;//后移
tmp->next = NULL;
i++;
while (i++ < length && mid != NULL) {
node* p, * q;
//使用p、q暂存start和mid节点
p = start->next;
q = mid->next;
//将mid指针所指节点单独摘下来,注意:要将尾巴(next)甩掉,不然结果不对
mid->next = NULL;
//插到start节点后面
start->next = mid;
mid->next = p;
//同时移动start和end指针
start = p;
mid = q;
}
mid = NULL;
}
int main() {
node* a = (node*)malloc(sizeof(node));
int d[] = { 1,2,3,4,5,6,7,8 };
create(a, 8, 0, d);
cross_sort(a, 8);
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。