将链表的所有奇数元素放于偶数元素前面

来源:互联网 发布:大数据标准化 编辑:程序博客网 时间:2024/06/05 09:40

具体要求:



头文件:

#pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int DataType;typedef struct Node{    DataType data;struct Node *next;}*PNode,Node;void ParityRearrangement(PNode *pHead);//将所有奇节点放在偶数节点的前面void ReverseNode(PNode *pHead);//将所有奇数节点反转,将所有偶数节点反转

代码实现:

void ParityRearrangement(PNode *pHead)//将所有奇节点放在偶数节点的前面{int flag = 0;PNode CurNode = NULL;PNode NextNode = NULL;PNode TailNode = NULL;assert(pHead);if(NULL == *pHead || NULL == (*pHead)->next)//链表无元素或只有一个元素,直接返回return;else if(NULL == (*pHead)->next->next)//链表有两个元素,直接交换{CurNode = *pHead;NextNode = CurNode->next;NextNode->next = CurNode;NextNode->next->next = NULL;*pHead = NextNode;}else//链表有多个元素{CurNode = *pHead;while(TailNode != *pHead){flag = 0;CurNode = *pHead;while(CurNode->next != TailNode){if((CurNode->data%2 == 0) && (CurNode->next->data%2 == 1)){DataType temp = CurNode->data;CurNode->data = CurNode->next->data;CurNode->next->data = temp;flag = 1;}CurNode = CurNode->next;}TailNode = CurNode;if(flag == 0)break;}}}void ReverseNode(PNode *pHead)//将所有奇数节点反转,将所有偶数节点反转{PNode CurNode = NULL;PNode PreNode = NULL;PNode TailNode = NULL;PNode OldNumber = NULL;//奇数节点PNode EvenNumber = NULL;//偶数节点assert(pHead);CurNode = *pHead;if(NULL == *pHead || NULL == (*pHead)->next || NULL == (*pHead)->next->next)return;PreNode = BuyNode(CurNode->data);TailNode = PreNode;while(CurNode  && ((CurNode->next->data%2) == 1))//反转奇数节点{CurNode = CurNode->next;OldNumber = BuyNode(CurNode->data);OldNumber->next = PreNode;PreNode = OldNumber;if(NULL == CurNode->next)break;}*pHead = PreNode;CurNode = CurNode->next;PreNode = BuyNode(CurNode->data);while(CurNode && ((CurNode->next->data%2) == 0))//反转偶数节点{CurNode = CurNode->next;EvenNumber = BuyNode(CurNode->data);EvenNumber->next = PreNode;PreNode = EvenNumber;if(NULL == CurNode->next)break;}TailNode->next = PreNode;}

测试部分:

#include"linklist.h"void test10(){PNode pNode = NULL;Init_LinkList(&pNode);PushBack(&pNode,1);PushBack(&pNode,2);PushBack(&pNode,3);PushBack(&pNode,4);PushBack(&pNode,5);PushBack(&pNode,6);ParityRearrangement(&pNode);ReverseNode(&pNode);Print_LinkList(pNode);Destroy(&pNode);}int main(){//test1();//test2();//test3();//test4();//test5();//test6();//test7();//test8();//test9();test10();    system("pause");return 0;}


1 0
原创粉丝点击