【笔试】35、合并两个排序的链表
2015-08-31 09:13
330 查看
/**************************************************************************************** *题目:合并两个排序的链表 * 输入两个递增排序的链表,合并这两个链表并使链表中的节点仍然是按照递增排序的。例如输入图3.7中的链表1和链表2, * 则合并之后的升序链表如链表3所示。 *时间:2015年8月31日09:02:36 *文件:MergeLink.java *作者:cutter_point ****************************************************************************************/ package bishi.Offer50.y2015.m08.d31; import bishi.Offer50.y2015.m08.d26.*; public class MergeLink { /** * 这里两个链表是开始就是数据的链表,也就是头不是一个不放数据的链表 * 有点类似数组第一个位置不放数据,从第1个位置开始一样,这里的参数就是第一个位置放数据的数组 * @param pHead1 * @param pHead2 * @return */ public LinkNode merge(LinkNode pHead1, LinkNode pHead2) { if(pHead1 == null) return pHead2; else if(pHead2 == null) return pHead1; //我们合并之后的链表头 LinkNode pMergeHead = null; if(pHead1.m_nValue < pHead2.m_nValue) { //如果第一个链表的当前节点值不第二个小 pMergeHead = pHead1; pMergeHead.m_pNext = merge(pHead1.m_pNext, pHead2); }//if else { //如果第一个链表的当前节点比第二个大的话 pMergeHead = pHead2; pMergeHead.m_pNext = merge(pHead1, pHead2.m_pNext); }//else return pMergeHead; } /** * 当我们的链表中的第一个节点是无用的只是用来做为一个头结点的时候 * @param pHead1 * @param pHead2 * @return */ public LinkNode mergeResult(LinkNode pHead1, LinkNode pHead2) { if(pHead1 == null || pHead1.m_pNext == null) return pHead2; else if(pHead2 == null || pHead2.m_pNext == null) return pHead1; LinkNode mergeResult = new LinkNode(); mergeResult.m_pNext = merge(pHead1.m_pNext, pHead2.m_pNext); return mergeResult; } @org.junit.Test public void Test() { LinkList link = new LinkList(); link.addTail(8);link.addTail(7);link.addTail(6);link.addTail(5);link.addTail(4);link.addTail(3); LinkList link2 = new LinkList(); link.addTail(2);link.addTail(1);link.addTail(0);link.addTail(-1);link.addTail(-2);link.addTail(-3); MergeLink ml = new MergeLink(); LinkNode head = ml.mergeResult(link.getHead(), link2.getHead()); //逆序输出 LinkList.PrintListReversingly_Recursively(head); } }
相关文章推荐
- 【微信开发】一获取用户授权(静默授权方式)
- JSBinding+SharpKit / 脚本加密(JSC或Bytecode,参考cocos2d-js)
- Folder Recursion with C#
- Java面试总结4
- [刷题]Topological Sorting
- .NET 社区汇总
- foxmail邮件太多,需要经常手工清理邮件怎么办
- C/C++ 实现可变参数的函数
- Java面试总结3
- 做了就不要后悔
- 蜂窝拓扑结构在SLG地图布局中的应用
- Qt在Windows下如何创建无CMD窗口控制台程序
- ZOJ 2604 Little Brackets(高精度+dp)
- Win 10生态圈:按时计费不是梦
- BZOJ 4238 电压 DFS+拓扑
- Android自习笔记——架构知识
- CocoaPods 执行 pod update 和 pod install 卡在Analyzing dependencies不动的解决方法
- Java面试总结2
- 软件项目开发模型
- mysql如何修改所有的definer