合并两个排序的链表
2016-03-29 15:43
323 查看
题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
算法思想:
这个题目的思想是通过两个指针分别指向两个链表,递归比较两个链表的值得大小,然后赋值给新建的头结点。直到结束。这里需要注意的就是,我们需要检查两个传进来的链表是否为空;
算法实现:
参考数据:
《剑指offer》
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
算法思想:
这个题目的思想是通过两个指针分别指向两个链表,递归比较两个链表的值得大小,然后赋值给新建的头结点。直到结束。这里需要注意的就是,我们需要检查两个传进来的链表是否为空;
算法实现:
#include<iostream> #include<stdlib.h> using namespace std; typedef struct ListNode{ int data; struct ListNode *next; }ListNode; ListNode * Merge(ListNode *pHead1, ListNode *pHead2){ 11 if(pHead1 == NULL){ //检查是否为空 12 return pHead2; 13 } 14 if(pHead2 == NULL){ 15 return pHead1; 16 } ListNode *pHead = NULL; if(pHead1->data < pHead2->data){ //递归合并两个链表 pHead = pHead1; pHead->next = Merge(pHead1->next, pHead2); } else{ pHead = pHead2; pHead->next = Merge(pHead1, pHead2->next); } return pHead; } ListNode *CreateList(int x){ //创建链表 long num; ListNode *pHead = NULL; ListNode *p = NULL; while(x-- > 0){ cin>>num; ListNode* pNew = new ListNode(); if(pNew == NULL){ exit(EXIT_FAILURE); } pNew->data = num; pNew->next = NULL; if(pHead == NULL) { pHead = pNew; p = pHead; } else { p->next = pNew; p = p->next; } } return pHead; } int main(){ int m, n; ListNode *p1 = NULL; ListNode *p2 = NULL; ListNode *result = NULL; while(cin>>m>>n){ p1 = CreateList(m); p2 = CreateList(n); result = Merge(p1, p2); if(result == NULL){ cout<<"NULL"<<endl; } else{ ListNode *index = result; while(index != NULL){ cout<<index->data<<' '; index = index->next; } cout<<endl; } } }
参考数据:
《剑指offer》
相关文章推荐
- 安卓app开发方式之webApp
- Zhejiang university----Hello World for U
- Java面向对象(下)
- [leetcode-335]Self Crossing(java)
- ssm框架资料
- Activity生命周期笔记
- Android SlidingMenu 使用详解
- css中的盒子模型
- mysql sql语句添加伪列
- 刚来注册博客,在这里住脚。自定义listView下拉刷新
- 设计模式-5-工厂模式
- 【消息队列MQ】【Kafka&Jafka】
- python sorted
- POJ2709
- 如何搭建和运行github上面使用maven构建的nfd工程
- Git 读书笔记(一)
- Maven打包包含依赖的可执行Jar – Maven Assembly Plugin
- 关于这两天研究Java打印pdf方法的记录
- oracle 的 nubmer 类型与 C# 的 float double decimal 对应关系
- Spark On YARN 分布式集群安装