设带头结点的单链表表示的线性表L=(a1,a2,a3,a4,……,an),试用复杂度为O(n)的算法,原地将L改造为L=(a1,a3, ……,a2,a4, ……)。
【问题描述】
设带头结点的单链表表示的线性表L=(a1,a2,a3,a4,……,an),试用复杂度为O(n)的算法,原地将L改造为L=(a1,a3, ……,a2,a4, ……)。
【输入形式】
第一行输入单链表元素个数n;
第二行输入n个整数。
【输出形式】
输出改造后的单链表。
【样例输入】
9
1 2 3 4 5 6 7 8 9
【样例输出】
1 3 5 7 9 2 4 6 8
【测试代码】
#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next;
} node,*LinkList;
void CreateList(LinkList *wx,int n)
{
LinkList p,q;
int i;
int e;
(*wx)=p=(LinkList)malloc(sizeof(node));
for(i=1; i<=n; i++)
{
q=(LinkList)malloc(sizeof(node));
scanf("%d",&e);
q->data=e;
p->next=q;
p=q;
}
p->next=NULL;
}
void PrintList(LinkList wx)
{
LinkList p=wx->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void form(LinkList wx)
{
LinkList p,q,r;
p=wx->next;
q=p->next;r=q->next;
while(q->next && r)
{
q->next=r->next;
r->next=p->next;
p->next=r;
p=r;
q=q->next;
if(q==NULL)break;
r=q->next;
}
}
int main()
{
LinkList wx;
int n;
scanf("%d",&n);
CreateList(&wx,n);
form(wx);
PrintList(wx);
return 0;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)