题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增顺序的。
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. IntelliJ IDEA 15.0.1配置jrebel6.5.2实现热部署

    网上查了很多,大多无效,写一下自己亲自实现的一种方法: 1. 官网下载Jrebel6.5.2版本的压缩包 2. 下载Jrebel6.5.2的破解文件:点击下载 3. 在intelliJ中添加插件(选择 ...

  2. L002-oldboy-mysql-dba-lesson02

            L002-oldboy-mysql-dba-lesson02 [root@web01 ~]# mysql -uroot -ptestpassword mysql> use mys ...

  3. [原创] linux课堂-学习笔记-目录及概况

    本学习笔记基于:网易云课堂-linux课堂 课时1Centos 6.4安装讲解46:14 课时2Centos 6.4桌面环境介绍与网络连接04:30 课时3 Linux目录结构介绍及内核与shell分 ...

  4. 如何建立一个“绑定友好的”usercontrol--wpf

    如何建立一个"绑定友好的"usercontrol--wpf 这几天在打算将以前用winform写的工具程序重构到wpf,顺便学习理解看过的wpf的知识. 因为程序设计到一个Exce ...

  5. 谈谈C语言的数据类型

    本文摘要: 本文主要讲述C语言中的数据类型,从基本的数据类型到派生的数据类型,从int ,char ,float double ....到指针,数组,函数,指向指针的指针,指向数组的指针,指向函数的指 ...

  6. Delphi中的四舍五入函数

    一.Delphi中的四舍五入法     四舍五入是一种应用非常广泛的近似计算方法,针对不同的应用需求,其有算术舍入法和银行家舍入法两种.     所谓算术舍入法,就是我们通常意义上的四舍五入法.其规则 ...

  7. java 中的equal和"=="

    先看一段代码 String str1 = new String("str"); String str2 = new String("str"); System. ...

  8. CentOS7安装nagios并配置出图详解

    目录 开始之前 系统环境 监控内容 所需软件包 台机器,全都按照CentOS7最小化模式安装系统 系统版本号 [root@localhost ~]# cat  /etc/redhat-release ...

  9. Oracle SQL的硬解析、软解析、软软解析

    Oracle中每条sql在执行前都要解析,解析分为硬解析.软解析.软软解析. Oracle会缓存DML语句,相同的DML语句会进行软解析.但不会缓存DDL语句,所以DDL每次都做硬解析.硬解析是一个很 ...

  10. Controlling Site Provisioning Process with a Custom Provider

    http://www.cnblogs.com/frankzye/archive/2010/09/07/1820346.html http://sujoysharepoint2010.blogspot. ...