这题的思路很简单,就是输入,建立,改变,输出。
其中的重点可能就是改变链表的节点位置;
有三种方法 1.创立两个数组 然后一个存储奇数位置的节点,一个存储偶数位置的节点;
2.首先遍历链表,把尾结点置空,然后把奇数位置上的节点从头插入,偶数位置上的节点从尾部插入,最后连接起来。
3(我用的这种方法)从头到尾移形换影不断更换奇数位置上的节点与偶数位置上的节点
#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode,*LinkList;
void CreateListTail(LinkList *L,int n)
{
LinkList p,q;
int i;
int e;
(*L)=p=(LinkList)malloc(sizeof(LNode));
for(i=1; i<=n; i++)
{
q=(LinkList)malloc(sizeof(LNode));
scanf("%d",&e);
q->data=e;
p->next=q;
p=q;
}
p->next=NULL;
}
void PrintList(LinkList L)
{
LinkList p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void OEReform(LinkList L)
{
q->next=r->next;
r->next=p->next;
p->next=r;//前三行是对位置上数值的改变
p=r;//下面的部分是对指针位置的改变
q=q->next;
if(q==NULL)
break;
r=q->next;
这部分写个1 2 3 4 5 6 7 8两三个例子基本上就领悟了
}
int main()
{
LinkList L;
int n;
scanf("%d",&n);
CreateListTail(&L,n);
OEReform(L);
PrintList(L);
return 0;
}