题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增顺序的。
struct ListNode{
      int    m_nKey;
      ListNode*    m_pNext;
}

测试用例:
1)功能测试(输入的两个链表有多个结点,结点的值互不相同或者存在值相等的多个结点);
2)特殊输入测试(两个链表的一个或者两个头结点为null指针、两个链表中只有一个结点)。
 
实现代码:
package com.yyq;

/**
* Created by Administrator on 2015/9/15.
*/
public class Merge {
public static ListNode merge(ListNode pHead1, ListNode pHead2){
if (pHead1 == null)
return pHead2;
else if(pHead2 == null)
return pHead1;
ListNode pMergedHead = null;
if (pHead1.getM_nValue() < pHead2.getM_nValue()){
pMergedHead = pHead1;
pMergedHead.setM_pNext(merge(pHead1.getM_pNext(), pHead2));
}
else{
pMergedHead = pHead2;
pMergedHead.setM_pNext(merge(pHead1,pHead2.getM_pNext()));
}
return pMergedHead;
} public static void printList(ListNode pListHead) {
if (pListHead == null)
return;
ListNode pNode = pListHead;
while (pNode != null) {
System.out.print(pNode.getM_nValue() + " ");
pNode = pNode.getM_pNext();
}
System.out.println();
} // ====================测试代码====================
public static ListNode Test(String testName, ListNode pHead1, ListNode pHead2)
{
if(testName != null)
System.out.println(testName+" begins:");
System.out.println("The first list is:");
printList(pHead1);
System.out.println("The second list is:");
printList(pHead2); System.out.println("The merged list is:");
ListNode pMergedHead = merge(pHead1, pHead2);
printList(pMergedHead);
return pMergedHead;
} // list1: 1->3->5
// list2: 2->4->6
public static void Test1()
{
ListNode pNode1 = new ListNode(1);
ListNode pNode3 = new ListNode(3);
ListNode pNode5 = new ListNode(5);
pNode1.setM_pNext(pNode3);
pNode3.setM_pNext(pNode5); ListNode pNode2 = new ListNode(2);
ListNode pNode4 = new ListNode(4);
ListNode pNode6 = new ListNode(6);
pNode2.setM_pNext(pNode4);
pNode4.setM_pNext(pNode6); Test("Test1", pNode1, pNode2);
pNode1 = null;
pNode2 = null;
} // 两个链表中有重复的数字
// list1: 1->3->5
// list2: 1->3->5
public static void Test2()
{
ListNode pNode1 = new ListNode(1);
ListNode pNode3 = new ListNode(3);
ListNode pNode5 = new ListNode(5);
pNode1.setM_pNext(pNode3);
pNode3.setM_pNext(pNode5); ListNode pNode2 = new ListNode(1);
ListNode pNode4 = new ListNode(3);
ListNode pNode6 = new ListNode(5);
pNode2.setM_pNext(pNode4);
pNode4.setM_pNext(pNode6); Test("Test2", pNode1, pNode2);
pNode1 = null;
pNode2 = null;
} // 两个链表都只有一个数字
// list1: 1
// list2: 2
public static void Test3()
{
ListNode pNode1 = new ListNode(1);
ListNode pNode2 = new ListNode(2); Test("Test3", pNode1, pNode2);
pNode1 = null;
pNode2 = null;
} // 一个链表为空链表
// list1: 1->3->5
// list2: 空链表
public static void Test4()
{
ListNode pNode1 = new ListNode(1);
ListNode pNode3 = new ListNode(3);
ListNode pNode5 = new ListNode(5);
pNode1.setM_pNext(pNode3);
pNode3.setM_pNext(pNode5);
Test("Test4", pNode1, null);
pNode1 = null;
} // 两个链表都为空链表
// list1: 空链表
// list2: 空链表
public static void Test5()
{
Test("Test5", null, null);
} public static void main(String[] args)
{
Test1();
Test2();
Test3();
Test4();
Test5();
}
}
 
输出结果:
Test1 begins:
The first list is:
1  3  5  
The second list is:
2  4  6  
The merged list is:
1  2  3  4  5  6  
Test2 begins:
The first list is:
1  3  5  
The second list is:
1  3  5  
The merged list is:
1  1  3  3  5  5  
Test3 begins:
The first list is:
1  
The second list is:
2  
The merged list is:
1  2  
Test4 begins:
The first list is:
1  3  5  
The second list is:
The merged list is:
1  3  5  
Test5 begins:
The first list is:
The second list is:
The merged list is:

P114、面试题17:合并两个排序的链表的更多相关文章

  1. 剑指offer-面试题17.合并两个排序的链表

    题目:输入两个递增的排序的链表,合并这两个链表并使新链表中的节点仍然是 按照递增排序的.例如链表1链表2合并为链表3. List1:->->-> List2:->->-& ...

  2. 剑指Offer:面试题17——合并两个排序的链表

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路1: 分别用p1,p2两个指针扫描两个有序链表,p3指针去构建新链表h3. p1.val & ...

  3. 《剑指offer》面试题17 合并两个排序的链表 Java版

    我的方法:新初始化一个链表头,比较两个链表当前节点的大小,然后连接到该链表中.遍历两个链表直到null为止. public ListNode merge(ListNode first, ListNod ...

  4. 【剑指offer】面试题 25. 合并两个排序的链表

    面试题 25. 合并两个排序的链表 NowCoder 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. Java 实现 ListNode Clas ...

  5. 《剑指offer》面试题25. 合并两个排序的链表

    问题描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2-> ...

  6. 《剑指offer》面试题17—合并两个排序链表

    题目:输入两个递增排顺序的链表,合并这两个链表并使合并后的链表仍是递增排序的. 重点: 1.代码鲁棒性:要判断输入的两个链表都为NULL:其中一个链表为NULL的情况. 2.用递归实现,注意递归的思路 ...

  7. 剑指offer面试题17:合并两个排序的链表

    题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点人是按照递增排序的.解题思路:两个链表分别都已经是有序的了,遍历链表的时候只要比较两个链表当前位置大小,取出最小的添加到新链表中. 可以有 ...

  8. 剑指Offer面试题:16.合并两个排序的链表

    PS:这也是一道出镜率极高的面试题,我相信很多童鞋都会很眼熟,就像于千万人之中遇见不期而遇的人,没有别的话可说,唯有轻轻地问一声:“哦,原来你也在这里? ” 一.题目:合并两个排序的链表 题目:输入两 ...

  9. 剑指offer——面试题25:合并两个 排序的链表

    自己答案: ListNode* MergeTwoSortedList(ListNode* pHead1,ListNode* pHead2) { if(pHead1==nullptr&& ...

  10. 剑指Offer面试题:13.合并两个排序的链表

    一 题目:合并两个排序的链表 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的.例如输入下图中的链表1和链表2,则合并之后的升序链表如链表3所示. 二 代码实现 te ...

随机推荐

  1. .NET架构师技能体系

    .NET架构师应该掌握什么样的技术?其实这个问题很简单,去看看招聘.NET架构师的公司的职位要求就知道了.比如:http://www.cnblogs.com/guwei4037/p/5615471.h ...

  2. js控制进度条到达100%跳转界面一

    进度条一般在手机上用到的比较广泛,刚好最近的项目也是一直在做手机站,这个特效是手机端的一个界面,现在我把改成pc端了,进度条的快慢速度和样式可自行调节,改动也是很方便的,不多说,看代码: <st ...

  3. python学习之jquery小练习

    <html> <head> <title>html/css/js学习小结</title> <script src="jquery-1.8 ...

  4. 【WPF】Application应用程序启动

    wpf应用程序在启动的时候会自动创建Main函数并调用Application实例的run(),从而启动Application进程.Main函数在一个App.g.cs文件中,App.g.cs文件的位置在 ...

  5. javascript event兼容IE和FF

    事件对象在IE和FF下的兼容写法 function abc(event){ var e=event||window.event; //键盘码的捕获 var key=e.which||e.keyCode ...

  6. oracle中的隐式提交(auto commit)

    通常我们执行sql或pl/sql时,需要我们手工提交.这样才能使所做的更改永久保存到数据库. 但有时即使我们没有在sql或pl/sql中发出commit命令,所做的更改也会被提交.这种提交是在某些特定 ...

  7. Linux中Kill进程的N种方法

    常规篇: 首先,用ps查看进程,方法如下: $ ps -ef …… smx       1822     1  0 11:38 ?        00:00:49 gnome-terminal smx ...

  8. 二十、mysql mysqldump备份工具

    .备份所有数据库 mysqldump -uroot -p --all-database > c:\all.sql 备份所有数据库到c盘下的all,sql文件 .备份某个数据库 mysqldump ...

  9. MVC学习系列——参考

    C#进阶系列——WebApi接口传参不再困惑:传参详解 http://www.cnblogs.com/landeanfen/p/5337072.html

  10. [SQL SERVER系列]之嵌套子查询和相关子查询

    子查询有两种类型,一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数:另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的 ...