设带头结点的单链表表示的线性表L=(a1,a2,a3,a4,……,an),试用复杂度为O(n)的算法,原地将L改造为L=(a1,a3, ……,a2,a4, ……)。
2021/10/7 9:40:51
本文主要是介绍设带头结点的单链表表示的线性表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;
}
这篇关于设带头结点的单链表表示的线性表L=(a1,a2,a3,a4,……,an),试用复杂度为O(n)的算法,原地将L改造为L=(a1,a3, ……,a2,a4, ……)。的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现