2019 41
#include<stdio.h>
#include<stdlib.h>
typedef struct Node {
int data;
struct Node* next;
}Node,*List;
void Print(List L)
{
Node* node;
node = L->next;
while (node)
{
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
void CreateList(List L, int length)
{
Node* node;
Node* rear;
rear = L;
for (int i = 0; i < length; i++)
{
node = (Node*)malloc(sizeof(Node));
scanf("%d", &node->data);
node->next = rear->next;
rear->next = node;
rear = node;
}
}
void ReArrange(List L)
{
Node* head;
head = L->next;
//创建两个指针,用于找到链表的最后一个元素
Node* p1 = L;
Node* p2 = L->next;
Node* p3 = L->next->next;
//创建一个指针,指向链表需要排列的头节点
//Print(L);
if (head->next->next)
{
//隔一个节点之后还有节点
while (head->next&&head->next->next)
{
//printf("%d", head->data);
//找到最后一个节点
while (p3)
{
p3 = p3->next;
p2 = p2->next;
p1 = p1->next;
}
p1->next = NULL;
p2->next = head->next;
head->next = p2;
head = p2->next;
//重新初始化
p1 = L;
p2 = L->next;
p3 = L->next->next;
}
}
}
int main()
{
List L = (List)malloc(sizeof(Node));
L->next = NULL;
CreateList(L,8);
//Print(L);
ReArrange(L);
Print(L);
//Print(L);
return 0;
}


浙公网安备 33010602011771号