15,440
社区成员
发帖
与我相关
我的任务
分享
//一个单链表,将链表从最后一个结点 依次间隔插入到从第一个结点之后,比如1->n->2->n-1.......,该怎么操作比较好
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct NODE {
int data;
struct NODE *next;
} *L;
void show() {
struct NODE *p;
p=L;
while (1) {
if (NULL==p) {
printf("null\n");
break;
}
printf("%d->",p->data);
p=p->next;
}
}
void fold() {
struct NODE *p,**o;
int n,i,j;
p=L;
n=0;
while (p) {p=p->next;n++;}
if (n>2) {
o=(struct NODE **)malloc(n*sizeof(struct NODE *));
p=L;
for (i=0;i<n;i++) {o[i]=p;p=p->next;}
for (i=0,j=n-1;i<j;i++,j--) {
o[i]->next=o[j];
o[j]->next=o[i+1];
}
o[i]->next=NULL;
free(o);
}
}
int main() {
struct NODE *p,*q;
L=NULL;
show();
fold();
show();
q=(struct NODE *)malloc(sizeof(struct NODE));
q->data=1;q->next=NULL;
L=q;
show();
fold();
show();
q=(struct NODE *)malloc(sizeof(struct NODE));
q->data=2;q->next=NULL;
L->next=q;
show();
fold();
show();
q=(struct NODE *)malloc(sizeof(struct NODE));
q->data=3;q->next=NULL;
L->next->next=q;
show();
fold();
show();
q=(struct NODE *)malloc(sizeof(struct NODE));
q->data=4;q->next=NULL;
L->next->next->next=q;
show();
fold();
show();
q=(struct NODE *)malloc(sizeof(struct NODE));
q->data=5;q->next=NULL;
L->next->next->next->next=q;
show();
fold();
show();
p=L;
while (1) {
if (NULL==p) {
break;
}
q=p->next;
free(p);
p=q;
}
return 0;
}
//null
//null
//1->null
//1->null
//1->2->null
//1->2->null
//1->2->3->null
//1->3->2->null
//1->3->2->4->null
//1->4->3->2->null
//1->4->3->2->5->null
//1->5->4->2->3->null
//