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;
}

 

 

posted @ 2021-09-30 14:15  磐正  阅读(20)  评论(0)    收藏  举报