单链表调整【C语言】
单链表(a1,a2,a3,a4,…,an)
要求将该单链表调整成如下结构
(an,an-2,…,a4,a2,a1,a3, …,an-3,an-1)
#include <stdio.h>
#include <stdlib.h>
#define elemtype int
int num=0;
typedef struct Node
{
elemtype data;
struct Node *next;
}Node;
typedef Node* Linklist;
void Initlist(Linklist *L)
{
*L=(Linklist)malloc(sizeof(Node));
(*L)->next=NULL;
}
void CreateFromTail(Linklist L)
{
int i=0;
Node *r=L,*s;
elemtype e;
while(i!=num)
{
scanf("%d",&e);
s=(Node*)malloc(sizeof(Node));
s->data=e;
r->next=s;
r=s;
i++;
}
r->next=NULL;
}
void CreateFromHead(Linklist L)
{
Node *s;
int i=0;
elemtype e;
while(i!=num)
{
scanf("%d",&e);
s=(Node*)malloc(sizeof(Node));
s->data=e;
s->next=L->next;
L->next=s;
i++;
}
}
void recreate(Linklist L)
{
int flag=1;
Node *p,*pp,*t;
t=L->next;
p=L->next;
pp=p->next;
while(pp!=NULL)
{
if(flag%2==1)
{
L->next=pp;
p->next=pp->next;
pp->next=t;
t=L->next;
pp=p->next;
flag++;
}
else
{
p=p->next;
pp=pp->next;
flag++;
}
}
}
void view(Linklist L)
{
printf("此链表为:\n");
Node *p;
p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
Linklist L;
Initlist(&L);
printf("请您输入--元素的总个数:\n");
scanf("%d",&num);
printf("若使用头插法请输入--'H'\n");
printf("若使用尾插法请输入--‘T’\n");
char I;scanf("%s",&I);
printf("请您输入--元素:\n");
if(I=='H')
{
CreateFromHead(L);
}
else
{
CreateFromTail(L);
}
view(L);
recreate(L);
view(L);
printf("Hello World!\n");
return 0;
}
请您输入--元素的总个数:
10
若使用头插法请输入--'H'
若使用尾插法请输入--‘T’
T
请您输入--元素:
1 2 3 4 5 6 7 8 9 10
此链表为:
1 2 3 4 5 6 7 8 9 10
此链表为:
10 8 6 4 2 1 3 5 7 9
Hello World!
Program ended with exit code: 0
Copyright © 2019 wyq. All rights reserved. |
---|