剑指offer第十六题【合并两个排序的链表】c++实现
2015-10-16 19:12
555 查看
合并两个排序的链表
参与人数:2725时间限制:1秒空间限制:32768K
通过比例:24.54%
最佳记录:0 ms|8552K(来自 大工zay)
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
新建一个链表然后遍历两个链表。
或者使用递归,面试没准考哪个。
参与人数:2725时间限制:1秒空间限制:32768K
通过比例:24.54%
最佳记录:0 ms|8552K(来自 大工zay)
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。新建一个链表然后遍历两个链表。
或者使用递归,面试没准考哪个。
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if(!pHead1){ return pHead2; }else if(!pHead2){ return pHead1; }else if(!pHead1&&!pHead2){ return NULL; } // if(pHead1->val<pHead2->val){ // pHead1->next=Merge(pHead1->next,pHead2); //<span style="white-space:pre"> </span> return pHead1; // }else{ // pHead2->next=Merge(pHead1,pHead2->next); // return pHead2; // } ListNode* orderList=NULL; if(pHead1->val<pHead2->val){ orderList=pHead1; pHead1=pHead1->next; }else{ orderList=pHead2; pHead2=pHead2->next; } ListNode *res=orderList; while(true){ if(!pHead1){ orderList->next=pHead2; break; }else if(!pHead2){ orderList->next=pHead1; break; }else{ if(pHead1->val<pHead2->val){ orderList->next=pHead1; orderList=orderList->next; pHead1=pHead1->next; }else{ orderList->next=pHead2; orderList=orderList->next; pHead2=pHead2->next; } } } return res; }
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总