链表奇偶排序以及反转问题
来源:互联网 发布:卓越之剑全套完整源码 编辑:程序博客网 时间:2024/05/22 00:44
将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并使奇数之间顺序反转,偶数之间顺序反转
如交换前:4->5->1->7->6
交换后:7->1->5->6->4
思路:申请两个头结点podd,peven分别指向奇数和偶数,开始遍历链表,若为奇数,结点podd指向该结点;若为偶数,则结点peven指向该点。最后分别进行顺序反转。如只要输出反转结果,不改变指针结构,可以运用递归或者堆栈的方式输出。
代码如下:
#include <stdio.h>#include <iostream>#include <stdlib.h>using namespace std;typedef struct LNode{ int value; struct LNode *next;}; LNode* createNode(int value){ LNode* p=new LNode(); //LNode *p=(LNode*)malloc(sizeof(LNode)); p->value=value; p->next=NULL; return p;} void ConnectNode(LNode *Pcurrent,LNode *Pnext) { if(Pcurrent==NULL) { printf("err to connection "); exit(1); } Pcurrent->next=Pnext; } struct LNode* Reverse(LNode *p) { if(p==NULL ) return NULL ; if( p->next==NULL) return p; LNode* phead=p; LNode* temp=p->next; while(temp) { LNode* pNext=temp->next; temp->next=p; p=temp; temp=pNext; } phead->next=NULL; return p; } void PrintNode(LNode* p) { if(p==NULL) return ; while(p) { printf("%d ",p->value); p=p->next; } } LNode* SwapNode(LNode* p) { LNode *Peven=new LNode(); //偶数链表 LNode *Podd=new LNode(); //奇数链表 LNode *PheadOdd=Podd; LNode *PheadEven=Peven;while(p!=NULL){ if(p->value%2==0) { Peven->next=p; Peven=p; } else { Podd->next=p; Podd=p; } p=p->next;}Peven->next=NULL;Podd->next=NULL;Podd=Reverse(PheadOdd->next);//5 7 1//PrintNode(Podd);Peven=Reverse(PheadEven->next);//PrintNode(Peven);p=Podd;while(Podd->next){ Podd=Podd->next;}Podd->next=Peven;return p; } int main(){ LNode *pNode=createNode(4); LNode *p1=createNode(5); LNode *p2=createNode(1); LNode *p3=createNode(7); LNode *p4=createNode(6); ConnectNode(pNode,p1); ConnectNode(p1,p2); ConnectNode(p2,p3); ConnectNode(p3,p4); //连接结点 4->5->7->1->6// PrintNode(p); LNode *phead=SwapNode(pNode); PrintNode(phead);return 0;}
0 0
- 链表奇偶排序以及反转问题
- 链表奇偶分离,并且链表反转
- 奇偶数间隔排序问题
- 反转链表以及反转链表进阶备忘
- 奇偶排序问题之单向扫描
- 奇偶数排序,荷兰国旗问题
- 算法面试:单向链表节点的奇偶排序。
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- eclipse color theme chose
- Oracle在Windows cmd上显示调整
- 常见排序算法及对应的时间复杂度和空间复杂度
- python笔试题之找出一个列表里出现频次最高的元素(most common elements in a list)
- leetcode 32.Longest Valid Parentheses
- 链表奇偶排序以及反转问题
- 微信应用号这滩“浑水”,互联网创业者们到底要不要蹚?
- 进程同步和互斥的关系
- 【App推广】国内App推广终极37个方法
- 用Fedora构建自己的Linux发行版
- Caffe + Ubuntu 15.04 + CUDA 7.5 新手安装配置指南
- 知乎日报客户端
- imshow()窗口乱码+msvcp110d.dll丢失的解决方法
- 文章转载-来人间一趟,你要摘一次月亮