将数组的奇数移到前面偶数到后面&&输出链表的倒数第k个结点
来源:互联网 发布:在淘宝怎么开旗舰店 编辑:程序博客网 时间:2024/05/22 03:40
将数组的奇数移到前面偶数到后面,即采用前面和后面往中间去遍历,如果满足条件则交换的算法。
关键是对于交换满足条件的判断,采用函数指针。
#include<iostream>#include<string>using namespace std;bool Isodd(int n){if(n%2 == 1)return true;elsereturn false;}void reorder(int *numbers,int length,bool (*func)(int)){if(length == 0|| numbers == NULL)return;int beg =0,end = length-1;while(beg<end){while(beg<end && func(numbers[beg]))beg++;while(beg<end && !func(numbers[end]))end--;if(beg < end){int temp = numbers[beg];numbers[beg] = numbers[end];numbers[end] = temp;}}}int main(){int numbers[] = {2,4,8,1,3,9,6};reorder(numbers,7,Isodd);for(int i =0;i<7;i++)printf("%d",numbers[i]);system("PAUSE");return 0;}输出链表的倒数第k个结点。题目简单,先一个指针走k步,然后另一个指针和先前的指针一起走,等先前的指针指向末尾,则另一个指针达到倒数第k个点。
关键是寻找倒数k时的健壮性。
#include<iostream>#include<string>#include<stack>using namespace std;struct ListNode{int value;ListNode* next;};//增加元素void AddToList(ListNode** pHead,int value){ListNode* pTemp = *pHead; pTemp = (ListNode *)malloc(sizeof(ListNode));pTemp->value = value;pTemp->next = NULL;if(*pHead == NULL)*pHead = pTemp;else{ListNode* pNTemp = *pHead;while(pNTemp->next != NULL)pNTemp = pNTemp->next;pNTemp->next = pTemp;}}//求长度int ListLen(ListNode* pHead){int n =0;while(pHead != NULL){pHead = pHead->next;n++;}return n;}//返回0则表示不存在int getlastk(ListNode* pHead,int k){if(pHead == NULL || k == 0)return 0;int len = ListLen(pHead);ListNode *pbeg = pHead;ListNode *pend = NULL;for(int i =0;i<k-1;i++){if(pbeg->next != NULL)pbeg = pbeg->next;elsereturn 0;}pend = pHead;while(pbeg->next != NULL){pbeg = pbeg->next;pend = pend->next;}return pend->value;}int main(){ListNode* pHead = NULL;AddToList(&pHead,1);AddToList(&pHead,2);AddToList(&pHead,3);AddToList(&pHead,4);AddToList(&pHead,5);AddToList(&pHead,6);int value;value = getlastk(pHead,2);printf("%d\n",value);value = getlastk(pHead,7);printf("%d\n",value);system("PAUSE");return 0;}
0 0
- 将数组的奇数移到前面偶数到后面&&输出链表的倒数第k个结点
- 每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个
- 课堂提问(C语言):输入10个整数到一个数组,将奇数放在数组前面,偶数放在数组后面,然后输出整个数组。
- 剑指Offer面试题14使数组中的奇数在偶数前,面试题15链表倒数第k个结点
- 第3周项目4-顺序表应用(2)将所在奇数移到所有偶数的前面.
- 剑指offer 之 输出链表的倒数第K个结点
- 第三周 项目4:顺序表应用-将所在奇数移到所有偶数的前面
- 查找并输出单链表的倒数第k个结点
- 查找链表的倒数第K个结点
- 链表的倒数第K个结点--双指针
- 找出链表的倒数第K个结点
- 链表倒数的第K个结点
- 剑指offer14:将数组奇数移到偶数前面
- 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针
- 输入一个单向链表,输出该链表中倒数第k 个结点。链表的倒数第0个结点为链表的尾指针。
- 输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
- 13.输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针
- 输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表 的尾指针
- typedef用法总结
- C++ 成员变量的内存分配
- Growth Hacker正从硅谷兴起
- Asp.net错误“System.Web.HttpException: 超过了最大请求长度”解决办法
- 32位+2G+Win7系统,如何解决out of memory问题
- 将数组的奇数移到前面偶数到后面&&输出链表的倒数第k个结点
- 使用JUnit测试预期异常
- ie8开发人员工具
- Android 在activity中显示非view组件eg:GLSurfaceView
- [LeetCode]Merge Two Sorted Lists
- 观察者模式
- tibco.ems.illegalstateexception illegal use of receive() from multiple threads
- Oracle BIEE
- int main(int argc,char* argv[])详解