将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并使奇数之间顺序反转,偶数之间顺序反转。
2016-09-08 10:50
330 查看
将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并使奇数之间顺序反转,偶数之间顺序反转。
示例:
交换前链表的顺序 交换后链表的顺序
4→5→7→1→6 ==> 1→7→5→6→4
1 ==> 1 (链表仅含一个元素)
2→1 ==> 1→2
==> (链表为空)
C/C++:
链表节点定义为:
struct node {
struct node *next;
int value;
};
struct node*swap(struct node *list);
示例:
交换前链表的顺序 交换后链表的顺序
4→5→7→1→6 ==> 1→7→5→6→4
1 ==> 1 (链表仅含一个元素)
2→1 ==> 1→2
==> (链表为空)
C/C++:
链表节点定义为:
struct node {
struct node *next;
int value;
};
struct node*swap(struct node *list);
#include<iostream> using namespace std; struct node { struct node *next; int value; }; node * CreateListNode(int value)//链表中创建节点 { if(value == NULL) return NULL; node *pNode = new node(); pNode->value = value; pNode->next =NULL; return pNode; } void ConnectListNodes(node *pCurrent, node *pNext) // 连接两个节点 { if(pCurrent == NULL) { cout<<"Error to connect two nodes."<<endl; exit(1); } pCurrent->next = pNext; } void PrintList(node *pHead) { cout<<"PrintList start."<<endl; node *pNode = pHead; while(pNode != NULL) { cout<<pNode->value; pNode = pNode->next; } cout<<endl; cout<<"PrintList"<<endl; } void Destroy(node *pHead) { node *pNode = pHead; while(pNode != NULL) { pHead = pHead->next; delete pNode; pNode = pHead; } } //返回,p所对应位置的下一个位置对应的值 int dqExchage(struct node *list1,struct node *list2,struct node *list3,int p) { if(p %2 ==0){//偶数 while(list1->next && list1->value % 2 !=0){ list1=list1->next; } list2=list1; } int tmp=list1->value; int q = p; while( list1->next && list1->value !=q){ list1->value = p; p = tmp; list1 = list1->next; tmp = list1->value; } list1->value = p; if(list1->next){ return list1->next->value; }else{ return NULL; } } //思路分析 // 特殊的插入排序 //针对奇数,插入到最前面,针对偶数,插入到前面奇数的后面,使其成为第一个偶数 struct node *swap(struct node *list) { node *pHead = list; node *pHead1 = list; //0 if(list->next){ int p=list->next->value; while(p != NULL){ p=dqExchage(list, list, list,p); } return list; }else{ return NULL; } } void Test1() { node *pNode1 = CreateListNode(4); node *pNode2 = CreateListNode(5); node *pNode3 = CreateListNode(7); node *pNode4 = CreateListNode(1); node *pNode5 = CreateListNode(6); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); PrintList(pNode1); PrintList(swap(pNode1)); } void Test2() { node *pNode1 = CreateListNode(4); node *pNode2 = CreateListNode(2); node *pNode3 = CreateListNode(7); node *pNode4 = CreateListNode(8); node *pNode5 = CreateListNode(6); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); PrintList(pNode1); PrintList(swap(pNode1)); } int main() { cout<<"Test1"<<endl; Test1(); cout<<"Test2"<<endl; Test2(); // system("pause"); return 0; }
相关文章推荐
- 将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并使奇数之间顺序反转,偶数之间顺序反转(创新工厂涂鸦移动面试题)
- 将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并使奇数之间顺序反转,偶数之间顺序反转
- 将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并保证奇数之间顺序不变,偶数之间顺序不变(创新工场)
- 将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并保证奇数之间顺序不变,偶数之间顺序不变(创新工场)
- 将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并保证奇数之间顺序不变,偶数之间顺序不变。
- 将链表的所有奇数元素放于偶数元素前面
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 调整数组顺序使奇数位于偶数前面,偶数和偶数之间的相对位置不变
- 第3周项目4-顺序表应用(2)将所在奇数移到所有偶数的前面.
- 调整数组使奇数全部都位于偶数前面。 题目: 输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 剑指offer题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- //1.调整数组使奇数全部都位于偶数前面。 //题目: //输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
- 调整数组顺序使奇数位于所有偶数前面
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 调整数组顺序使奇数位于偶数前面,偶数和偶数之间的相对位置不变
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。