1.思路:

思路:(如上图)
1.首先把链表分成两部分:头结点Head和头节点下一个结点Current作为一组A,剩下的作为另一组B。把Current指向NULL,断开链表。
2.把B组的结点1,2,3........,依次插入到Head和Current之间。
3.最后把Head指回最后插入的结点就完成了。
思路实现函数:
Node* fun(Node* Head)
{
Node *Pn;
Node *Pre;
Node *Current = Head->next;
Pn = Current->next;
Current->next=NULL;
while(Pn!=NULL)
{
Pre=Pn->next;
Pn->next=Current;
Current=Pn;
Pn=Pre;
}
Head->next=Current;
return Head;
}
测试代码:
#include <stdio.h>
typedef struct A
{
int a;
struct A *next;
}Node;
Node* fun(Node* Head)
{
Node *Pn;
Node *Pre;
Node *Current = Head->next;
Pn = Current->next;
Current->next=NULL;
while(Pn!=NULL)
{
Pre=Pn->next;
Pn->next=Current;
Current=Pn;
Pn=Pre;
}
Head->next=Current;
return Head;
}
int main()
{
/*构造链表,int a分别为0,1,2,3,4*/
Node arr[5];
Node head;
Node *Head;
Node *pn;
Head = &head;
pn = Head;
int i;
for(i=0;i<5;i++)
arr[i].a=i;
Head->next=&arr[0];
for(i=0;i<4;i++)
{
arr[i].next=&arr[i+1];
}
arr[4].next=NULL;
pn=Head->next;
/*打印原链表*/
while(pn!=NULL)
{
printf("%d,",pn->a);
pn=pn->next;
}
printf("\n");
/*-----------------------逆序后--------------------------------*/
Head = fun(Head);
pn=Head->next;
while(pn!=NULL)
{
printf("%d,",pn->a);
pn=pn->next;
}
return 0;
}