如何实现单链表任意两个元素交换(不包括表头)
来源:互联网 发布:银行卡js验证规则 编辑:程序博客网 时间:2024/05/22 09:07
// 凭第一感觉写的版本,算法和思路有好的想法再优化
/* 交换链表任意两个元素 */void SwapItem(LinkedList *head, int posA, int posB)//从非头结点开始交换操作{//保证至少存在两个节点assert(head && head->next && head->next->next);assert(posA>=1 && posB>=1);if (posA == posB){printf("\nerror: %d,交换位置相同,不做任何操作!\n", __LINE__);getchar();//return;exit(1);}//保证交换位置合理性,参数2,3写反位置也没关系int first,second;if (posA<posB) { first = posA, second = posB;}else {first = posB;second = posA;}if ((second - first) == 1) //A与B是相邻的两个节点{LinkedList *prev, *nodeA, *nodeB, *post;int i = 1;prev = head;nodeA = prev->next;nodeB = nodeA->next;while (i<first && nodeB) //定位到节点A、B的位置{prev = prev->next;nodeA = nodeB;nodeB = nodeB->next;i++;}if (nodeB == NULL) //B节点超出链表范围{printf("\nerror: %d\n", __LINE__);getchar();//return;exit(1);}else {prev->next = nodeB;nodeA->next = nodeB->next;nodeB->next = nodeA;}}else //A与B是不相邻的点{LinkedList *prevA, *nodeA, *prevB, *nodeB;//prevA是节点nodeA节点的前驱节点,prevB是节点nodeB的前驱节点prevA = head;nodeA = prevA->next;int iA=1, jB=1;while (iA<first && nodeA)//定位到nodeA节点位置{prevA = nodeA;nodeA = nodeA->next;iA++;}if (nodeA == NULL) //nodeA节点超出链表范围{printf("\nerror: %d\n", __LINE__);getchar();//return;exit(1);}prevB = head;nodeB = prevB->next;while (jB<second && nodeB)//定位到nodeB节点位置{prevB = nodeB;nodeB = nodeB->next;jB++;}if (nodeB == NULL) //nodeB节点超出链表范围{printf("\nerror: %d\n", __LINE__);getchar();//return;exit(1);}//各项均满足,可以交换LinkedList *tempB;tempB = nodeB->next;prevA->next = nodeB;prevB->next = nodeA;nodeB->next = nodeA->next;nodeA->next = tempB;}}
0 0
- 如何实现单链表任意两个元素交换(不包括表头)
- 单链表交换任意两个元素(不包括表头)
- 7,单链表交换任意两个元素(不包括表头)
- 7单链表交换任意两个元素(不包括表头)
- 程序员面试题目总结--链表(7)【实现单链表交换任意两个元素(不包括表头)】
- 交换单链表中任意两个元素(不包括表头)
- 【算法题】交换单链表任意两个元素
- 【学习点滴-数据结构-单链表】交换单链表中任意两个元素
- 交换单链表任意两个元素(完整程序)
- 建立单链表并交换表中任意两个元素
- 数据结构:交换单链表中的任意两元素--C实现
- 合并两个页签,不包括表头
- 交换单链表的任意两个节点
- 交换两个元素
- C++如何实现任意类型的数据交换
- 两个元素内容的交换
- 交换两个数组中的元素
- 交换数组的任意2个元素
- sockaddr和sockaddr_in的区别 http://blog.csdn.net/joeblackzqq/article/details/8258693
- 2015-7-30---------单词
- 夫妻吵架也要有技巧!
- HDU 5335 Walk Out 状压DP乱搞
- IOS ----- 程序启动过程
- 如何实现单链表任意两个元素交换(不包括表头)
- meta 标签
- Centos7/linux Dsl无法联网,帐号密码都正确,解决方法
- jQuery入门学习总结
- POJ 1180 Batch Scheduling (斜率优化DP)
- 程序员保护眼睛几种方法
- SQL Server存储机制
- Algorithms—231.Power of Two
- HDU5335 Work Out 层次遍历