剑指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在数组 ...
随机推荐
- 编写Tesseract的Python扩展
Tesseract是一个开源的OCR(光学字符识别)引擎,用于识别并输出图片中的文字.虽然和商业软件比起来识别精度不算很高,但是如果你要寻找免费开源的OCR引擎,可能Tesseract就是唯一的选择了 ...
- Apache 工作模式详解
Apache 工作模式详解 Apache 2.X 支持插入式并行处理模块,称为多路处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择, ...
- [Android Studio系列(五)] Android Studio手动配置Gradle的方法
1 问题 (1) android sutdio第一次打开一个工程巨慢怎么办? (2) 手动配置Gradle Home为什么总是无效? (3) 明明已经下载了Gradle,配置了gradle home, ...
- JavaEE之注解
1注解:Annotation注解,是一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次,给计算机,JVM提供解读信息的. 2注解的作用:编译检查:代码分析,编 ...
- 3.scala容器
3.scala容器 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-o ...
- DIKW:数据、信息、知识、智慧的金字塔层次体系
http://www.ciotimes.com/ProCase/85417.html 前言 知识对于个人.组织的重要性已经不言而喻.可以说,管理与应用知识的能力已经成为企业的核心竞争力. 知识如此重要 ...
- 关于分析web.xml的一篇博客,写的很详细
http://blog.csdn.net/believejava/article/details/43229361
- libnetwork 源码浅析
[编者的话]从docker 1.6开始关注docker网络这块,从原来的铁板一块,到后来的libnetwork拆分,到现在的remote driver,docker 一直在改进.功能缺失,实用性不足, ...
- LeetCode第[19]题(Java):Remove Nth Node From End of List(删除链表的倒数第N个节点)
题目:删除链表的倒数第N个节点 难度:Medium 题目内容: Given a linked list, remove the n-th node from the end of list and r ...
- sql server数据库课程设计分析
课题:能源管理收费系统 系统功能的基本要求: (1)用户基本信息的录入:包括用户的单位.部门.姓名.联系电话.住址 : (2)用户水.电.气数据的录入(每个月的数据的录入): (3)水.电.气价格的管 ...