剑指offer—第三章高质量代码(合并两个排序链表)
题目:输入员两个递增排序的链表,合并这两个链表并使新的链表中的结点仍然是按照递增排序的。
思路:首先,定义两个头节点分别为Head1和Head2的链表,然后比较第一个节点的值,如果是Head1->mValue比Head2->mValue小,那么头节点,就是Head1,递归实现后面的节点的排序。
C++代码:
#include<iostream>
using namespace std;
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
ListNode* CreateList(int a[],int b)
{ ListNode* pHead=NULL,*pNode=NULL;
for(int i=;i<b;i++)
{
ListNode* pNew=new ListNode();
pNew->m_nValue=a[i];
pNew->m_pNext=NULL;
if(pHead==NULL)
{
pHead=pNew;
pNode=pNew; }
else
{
pNode->m_pNext=pNew;
pNode=pNode->m_pNext;
}
}
return pHead;
}
void PrintList(ListNode* pHead)
{
if(pHead==NULL)
{
return;
}
ListNode* pNode=pHead;
while(pNode!=NULL)
{
cout<<pNode->m_nValue<<" ";
pNode=pNode->m_pNext; }
cout<<endl;
}
ListNode* MergeLink(ListNode* Head1,ListNode* Head2)
{
ListNode* MergeHead=NULL;
if(Head1==NULL)
return Head2;
if(Head2==NULL)
return Head1;
if(Head1==NULL&&Head2==NULL)
return NULL;
if(Head1->m_nValue>Head2->m_nValue)
{
MergeHead=Head2;
Head2->m_pNext=MergeLink(Head2->m_pNext,Head1);
}
else
{
MergeHead=Head1;
Head1->m_pNext=MergeLink(Head1->m_pNext,Head2);
}
return MergeHead;
}
void main()
{
int a[]={,,,,};
int b[]={,,};
ListNode* Head1=CreateList(a,);
ListNode* Head2=CreateList(b,);
PrintList(Head1);
PrintList(Head2);
ListNode* Head3=MergeLink(Head1,Head2);
PrintList(Head3); }
Java代码:
public class MergeLink {
public static class ListNode
{
int m_nValue;
ListNode m_pNext;
};
public static ListNode CreateList(int[] a,int b)
{
ListNode pHead=null,pNode=null;
for(int i=0;i<b;i++)
{
ListNode pNew=new ListNode();
pNew.m_nValue=a[i];
pNew.m_pNext=null;
if(pHead==null)
{
pHead=pNew;
pNode=pNew;
}
else
{
pNode.m_pNext=pNew;
pNode=pNode.m_pNext;
}
}
return pHead;
}
public static void PrintList(ListNode pHead)
{
if(pHead==null)
{
return;
}
ListNode pNode=pHead;
while(pNode!=null)
{
System.out.print(pNode.m_nValue+" ");
pNode=pNode.m_pNext;
}
System.out.println();
}
public static ListNode MergeLink(ListNode Head1,ListNode Head2)
{
ListNode MergeHead=null;
if(Head1==null)
return Head2;
if(Head2==null)
return Head1;
if(Head1==null&&Head2==null)
return null;
if(Head1.m_nValue>Head2.m_nValue)
{
MergeHead=Head2;
Head2.m_pNext=MergeLink(Head2.m_pNext,Head1);
}
else
{
MergeHead=Head1;
Head1.m_pNext=MergeLink(Head1.m_pNext,Head2);
}
return MergeHead;
}
public static void main(String[] args)
{
int a[]={3,4,5,6,8};
int b[]={1,2,7};
ListNode Head1=CreateList(a,5);
ListNode Head2=CreateList(b,3);
PrintList(Head1);
PrintList(Head2);
ListNode Head3=MergeLink(Head1,Head2);
PrintList(Head3);
}
}
剑指offer—第三章高质量代码(合并两个排序链表)的更多相关文章
- 剑指offer—第三章高质量代码(数值的整数次方)
高质量的代码:容错处理能力,规范性,完整性.尽量展示代码的可扩展型和可维护性. 容错处理能力:特别的输入和处理,异常,资源回收. 规范性:清晰的书写,清晰的布局,合理的命名. 完整性:功能测试,边界测 ...
- 剑指offer—第三章高质量代码(o(1)时间删除链表节点)
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点,链表节点与函数的定义如下:struct ListNode{int m_nValue;ListNode* m_pValue ...
- 剑指offer—第三章高质量的代码(按顺序打印从1到n位十进制数)
题目:输入一个数字n,按照顺序打印出1到最大n位十进制数,比如输入3,则打印出1,2,3直到最大的3位数999为止. 本题陷阱:没有考虑到大数的问题. 本题解题思路:将要打印的数字,看成字符串,不足位 ...
- 剑指offer——python【第16题】合并两个有序链表
题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1-& ...
- 《剑指offer》第二十五题(合并两个排序的链表)
// 面试题25:合并两个排序的链表 // 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按 // 照递增排序的.例如输入图3.11中的链表1和链表2,则合并之后的升序链表如链 ...
- 剑指offer第三章
剑指offer第三章 1.数值的整数次方 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. class Solution { public ...
- 剑指offer-第三章高质量代码(反转链表)
题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转链表的头节点. 思路:对一个链表反转需要三个指针操作来保证链表在反转的过程中保证不断链,给链表一个行动指针pNode,对pNode指向的节 ...
- 剑指offer-第三章高质量代码(树的子结构)
题目:输入两个二叉树A和B,判断B是不是A的子结构. 思路:遍历A树找到B树的根节点,然后再判断左右子树是否相同.不相同再往下找.重复改过程. 子结构的描述如下图所示: C++代码: #include ...
- 剑指offer第五章
剑指offer第五章 1.数组中出现次数超过一半的数 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组 ...
随机推荐
- 官方online ddl
一.5.6版本online DDL 操作 In Place Rebuilds Table Concurrent DML Only Modifies Metadata 说明 add/create sec ...
- Tomcat 启动内存修改
内存修改文件 Windows 文件 /bin/catalina.bat Linux 文件 /bin/catalina.sh 方法一 # 设置参数 JAVA_OPTS='-Xms[初始化内存大小] -X ...
- Vmware ESXi 6.0 多Vlan部署,vSphere Client管理方法
背景: 公司IT部门新购了两台服务器与一台存储,打算做虚拟化,并将存储分成两个部分,分别配给那两台服务器.在宿主机上要安装的虚拟机属于不同的网段,这就涉及了多VLAN,当然这并不是多么高深的技术,属于 ...
- 20145109 《Java程序设计》第七周学习总结
20145109 <Java程序设计>第七周学习总结 Chapter 13 Time & Date Date System.currentTimeMillis() return L ...
- Cisco、HUAWEI、H3c、Firewall等设备配置snmp
配置HUAWEI交换机S1720.S2700.S5700.S6720等型号设备的snmp v3配置 注:此配置来源自官方配置文档 操作步骤 配置交换机的接口IP地址,使其和网管站之间路由可达 (图1) ...
- 利用canvas和RGraph作图
利用canvas可以直接在页面中绘制各种复杂的图形,其中引用到一个Rgraph的插件. Rgraph插件使用非常方便,只需几步就可以完成一个折线图.饼图.柱状图,或是其中两者图形的结合! (1) 引用 ...
- Linux上超酷的命令行扩展工具Oh My Zsh
Oh My Zsh 是一款社区驱动的命令行工具,正如它的主页上说的,Oh My Zsh 是一种生活方式.它基于 zsh 命令行,提供了主题配置,插件机制,已经内置的便捷操作.给我们一种全新的方式使用命 ...
- ggplot2 specific command
# By default, the same scales are used for all panels. You can allow # scales to vary across the pan ...
- Gulp实例(包括环境搭建的自动检测)
# Gulp实例(包括环境搭建的自动检测) Gulp是一个自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务.下面我将完成如下的功能点并且附上源码: CSS文件打包 less文件打包 s ...
- BZOJ 1185 [HNOI2007]最小矩形覆盖:凸包 + 旋转卡壳
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1185 题意: 给出二维平面上的n个点,问你将所有点覆盖的最小矩形面积. 题解: 先找出凸 ...