8.通过调整链来交换两个相邻的元素
2013-11-29 16:14
239 查看
/*通过调整链来交换两个相邻的元素*/ /*单链表*/ #include<iostream> using namespace std; struct ListNode{ int value; ListNode * pNext; }; void addListNode(ListNode * & p, int v){ if(NULL == p){ ListNode * pTem = new ListNode; pTem->pNext = NULL; pTem->value = v; p = pTem; } else addListNode(p->pNext,v); } void swap(ListNode * & p){ //chang the neighboring node; if(NULL == p) return; ListNode * p1; ListNode * p2; p1 = p->pNext; p2 = p1->pNext; p1->pNext = p2->pNext; p->pNext = p2; p2->pNext = p1; } void traverse(ListNode * p){ //traverse the list and output the value while(NULL != p) { cout << p->value << " "; p=p->pNext; } cout << endl; return; } int main(){ ListNode * pHead = NULL; addListNode(pHead,1); addListNode(pHead,2); addListNode(pHead,3); addListNode(pHead,4); addListNode(pHead,5); traverse(pHead); swap(pHead->pNext); traverse(pHead); return 0; } /*双链表*/ #include<iostream> using namespace std; struct ListNode{ int value; ListNode * pNext; ListNode * pPre; }; ListNode * pTail; void addListNode(ListNode * & p, int v){ if(NULL == p){ if( NULL == pTail){ ListNode * pTem = new ListNode; pTem->pNext = NULL; pTem->pPre = NULL; pTem->value = v; p = pTem; pTail = pTem; } else{ ListNode * pTem = new ListNode; pTem->pNext = NULL; pTem->pPre = pTail; pTem->value = v; p = pTem; pTail = pTem; } } else addListNode(p->pNext,v); } void swap(ListNode * & p){ //chang the neighboring node; if(NULL == p) return; ListNode * p1; ListNode * p2; p1 = p->pNext; p2 = p1->pNext; p1->pNext = p2->pNext; p2->pNext->pPre = p1; p->pNext = p2; p2->pPre = p; p2->pNext = p1; p1->pPre = p2; } void traverse(ListNode * p){ //traverse the list and output the value while(NULL != p) { cout << p->value << " "; p=p->pNext; } cout << endl; ListNode * p1 = pTail; while(NULL != p1) { cout << p1->value << " "; p1 = p1->pPre; } cout << endl; return; } int main(){ ListNode * pHead = NULL; pTail = NULL; addListNode(pHead,1); addListNode(pHead,2); addListNode(pHead,3); addListNode(pHead,4); addListNode(pHead,5); traverse(pHead); swap(pHead->pNext); traverse(pHead); return 0; }
相关文章推荐
- 练习 3.3 通过只调整指针(不是数据)来交换两个相邻的元素
- p62 练习3.3 通过只调整指针(而不是数据)来交换两个相邻的元素,使用:
- 数据结构与算法分析 c++11 练习3.2 通过只调整链(而不是数据)来交换两个相邻的元素
- 通过只调整指针(而不是数据)来交换两个相邻的元素
- 7-6 冒泡法排序(20 分) 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素
- 只调整指针来交换两个相邻的元素【双链表】
- 写正确函数需要注意的地方:两个序列a,b,大小都为n,序列元素的值为任意整数,无序;要求通过交换a,b中的元素,使序列a元素的和与序列b元素的和之间的差最小
- 《数组-规划》 有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小
- 有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和
- 通过交换两个数组的元素,使数组元素和之差最小
- 习题3.3---只通过调整指针来达到相邻结点交换的过程
- 华为面试题(8分钟写出代码) 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 有两个数组a,b,大小都为n,;通过交换a,b中的元素,使sum(a)-sum(b)最小。
- 单双链表,通过指针变动交换相邻元素
- 有两个序列a,b,大小都有n,序列元素的值任意整数,无序; 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b无素的和]之间的差最大。
- 有两个数组a,b,大小都为n,;通过交换a,b中的元素,使sum(a)-sum(b)最小。
- 关于通过异或交换两个元素的值的一个陷阱
- 有两个数组a,b,大小都为n,;通过交换a,b中的元素,使sum(a)-sum(b)最小。
- 有两个序列a,b,大小都为 n,序列元素的值任意整数,无序 通过交换a,b中的元素,使序列 a的和与序列b的和之间的差最小
- [微软]有两个序列a,b,大小都为n,序列元素的值任意整数,无序; 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小