算法-连接两条排序的链表
来源:互联网 发布:粒子群算法电子书 编辑:程序博客网 时间:2024/06/07 08:41
之前在牛客网上面做的题目,感觉对自己很有帮助,而且以后面试可能会用到,整理了两种方法,递归的和非递归的,同时也是对代码再一次巩固了。
ok,第一种,用递归实现!
class Solution{ListNode * Merge(ListNode* pHead1, ListNode *pHead2){if (pHead1 == NULL) //如果pHead1当前指向的节点为空返回当前pHead2指向的节点{return phead2;}if (pHead2 == NULL){return pHead1; //如果pHead2当前指向的节点为空返回当前pHead1指向的节点}if (pHead1->val < pHead2->val)//如果两个节点当前指向的都不为空的话那么就比较{pHead1->next = Merge(pHead1->next, pHead2); //如果pHead1大,那么下一个节点将从pHead1->next和pHead2决出return pHead1; //第一次比较的头结点决定最后返回哪个头结点}else{pHead2->next = Merge(pHead1, pHead2->next); //如果pHead2大,那么下一个节点将从pHead和pHead2->next决出return pHead2;}}};
第二种,非递归算法。
class Solution{ListNode * Merge(ListNode * pHead1, ListNode *pHead2){ListNode * cur = NULL; //当前结点位置ListNode * result = NULL; //最后返回的头结点if (pHead1 == NULL) {return pHead2;}if (pHead2 == NULL){return pHead1;}while (pHead1 != NULL && pHead2 != NULL)//两个头结点同时都不为空{if (pHead1->val < pHead2->val){if (result == NULL) //如果当前result为空那么当前节点和最后头结点都为pHead1{cur = result = pHead1;}else //如果不空那么当前节点的下一个肯定是这次比较小的那个{cur->next = pHead1;cur = cur->next;}pHead1 = pHead1->next; //pHead则需要往后遍历一个}else{if (pHead1->val > pHead2->val){if (result == NULL){cur = result = pHead2;}else {cur->next = pHead2;cur = cur->next;}pHead2 = pHead2->next;}}}if (pHead1 == NULL) //退出while循环后如果某一条链表还没有完全遍历则把cur指向{cur->next = pHead2;}if (pHead2 == NULL){cur->next = pHead1;}}};
阅读全文
0 0
- 算法-连接两条排序的链表
- 合并两条排序的链表
- 基于链表的两种排序算法
- 两条的链表交点
- 两表连接,如果连接的表中有两条以上匹配的记录,只选出第一条
- 判断两条线段相交的两种算法
- mvc 两表连接和随机排序
- 对不平行的两条直线进行连接
- 数组排序的两种算法--冒泡排序/选择排序
- 改进的两路归并排序算法
- 两种常用的排序算法
- MapReduce里面的两种排序算法
- 冒泡排序算法的两种优化
- 两种排序算法的运行时间
- JavaScript实现的两种排序算法
- 快速排序算法的两种实现
- jsp页面一行只显示两条记录的算法
- 合并两条有序链表
- D
- 单点登录
- POJ 1322 dp
- IGMP:Internet组管理协议
- java数据类型的种类以及存放的位置
- 算法-连接两条排序的链表
- DNS的层次
- Luogu P1081 [NOIp2012]开车旅行
- IE11的padding及h5验证问题
- 【机器学习实战 第九章】树回归 CART算法的原理与实现
- 如何搭建Maven环境
- 解决高分辨率屏幕老版软件适配问题
- pycharm在ubuntu xfce下面Alt+insert快捷键冲突解决
- Python迭代器简介