【剑指offer】合并两有序单链表
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25739727
九度OJ上AC,採用归并的思想递归实现。
- 题目描写叙述:
-
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们须要合成后的链表满足单调不减规则。
(hint: 请务必使用链表。)
- 输入:
-
输入可能包括多个測试例子,输入以EOF结束。
对于每一个測试案例,输入的第一行为两个整数n和m(0<=n<=1000, 0<=m<=1000):n代表将要输入的第一个链表的元素的个数,m代表将要输入的第二个链表的元素的个数。
以下一行包括n个数t(1<=t<=1000000):代表链表一中的元素。接下来一行包括m个元素,s(1<=t<=1000000)。
- 输出:
-
相应每一个測试案例,
若有结果,输出相应的链表。否则,输出NULL。
- 例子输入:
-
5 2
1 3 5 7 9
2 4
0 0
- 例子输出:
-
1 2 3 4 5 7 9
NULL
AC代码:
#include<stdio.h>
#include<stdlib.h> typedef int ElemType; typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*pNode; /*
合并两个升序链表,合并后的链表依旧升序排列
*/
pNode MergeList(pNode pHead1,pNode pHead2)
{
if(pHead1 == NULL)
return pHead2;
if(pHead2 == NULL)
return pHead1; pNode pMergeHead = NULL;
if(pHead1->data > pHead2->data)
{
pMergeHead = pHead2;
pMergeHead->next = MergeList(pHead1,pHead2->next);
}
else
{
pMergeHead = pHead1;
pMergeHead->next = MergeList(pHead2,pHead1->next);
}
return pMergeHead;
} int main()
{
int n,m;
while(scanf("%d %d",&n,&m) != EOF)
{
pNode pHead1 = NULL;
if(n > 0)
{
int i,data;
scanf("%d",&data);
pHead1 =(pNode)malloc(sizeof(Node));
if(pHead1 == NULL)
exit(EXIT_FAILURE);
pHead1->data = data;
pHead1->next = NULL; pNode pCur = pHead1;
for(i=0;i<n-1;i++)
{
scanf("%d",&data);
pNode pNew =(pNode)malloc(sizeof(Node));
if(pNew == NULL)
exit(EXIT_FAILURE);
pNew->data = data;
pNew->next = NULL;
pCur->next = pNew;
pCur = pCur->next;
}
} pNode pHead2 = NULL;
if(m > 0)
{
int i,data;
scanf("%d",&data);
pHead2 =(pNode)malloc(sizeof(Node));
if(pHead2 == NULL)
exit(EXIT_FAILURE);
pHead2->data = data;
pHead2->next = NULL; pNode pCur = pHead2;
for(i=0;i<m-1;i++)
{
scanf("%d",&data);
pNode pNew =(pNode)malloc(sizeof(Node));
if(pNew == NULL)
exit(EXIT_FAILURE);
pNew->data = data;
pNew->next = NULL;
pCur->next = pNew;
pCur = pCur->next;
}
} pNode pMergeHead = MergeList(pHead1,pHead2);
if(pMergeHead == NULL)
printf("NULL\n");
else
{
pNode pCur = pMergeHead;
while(pCur != NULL)
{
//这里主要时要注意输出的格式
if(pCur->next == NULL)
printf("%d\n",pCur->data);
else
printf("%d ",pCur->data);
pCur = pCur->next;
}
}
}
return 0;
}
/************************************************************** Problem: 1519 User: mmc_maodun Language: C Result: Accepted Time:250 ms Memory:4080 kb****************************************************************/【剑指offer】合并两有序单链表的更多相关文章
- 剑指OFFER——合并两个有序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 再做这道题就是想不起来书上怎么做的了,但是最近看STL里面全是这种基础的合并啊,比较啊.就算不会也看会了. ...
- 剑指Offer——合并两个排序的链表
题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 分析: 苦力活,使用两个指针分别指向未被合并的两个链表的首部,比较两个首部数值的大小,合并数值 ...
- python剑指offer 合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. # -*- coding:utf-8 -*- # class ListNode: # def _ ...
- 剑指Offer 合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路: 用2个新节点,一个用来存放新链表的头节点,另一个用来移动.当p1,p2有一个到尾部的 ...
- 剑指offer——合并两个排序的链表——对象、引用和赋值初接触
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然,我们需要合成后的链表满足单调不减规则. 先公布结果: /* public class ListNode { int val; List ...
- 用js刷剑指offer(合并两个排序的链表)
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 牛客网链接 js代码 /*function ListNode(x){ this.val = x; ...
- 剑指 Offer 52. 两个链表的第一个公共节点 + 链表 + 第一个公共结点 + 双指针
剑指 Offer 52. 两个链表的第一个公共节点 Offer_52 题目详情 题解分析 可以使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结 ...
- 力扣 - 剑指 Offer 52. 两个链表的第一个公共节点
题目 剑指 Offer 52. 两个链表的第一个公共节点 思路1(栈) 若两个链表相遇,则从它开始相遇的地方到链表末尾应该都是相同的,那么我们可以将两个链表分别放入两个栈中,然后依次循环比较两个栈顶的 ...
- 剑指Offer - 九度1524 - 复杂链表的复制
剑指Offer - 九度1524 - 复杂链表的复制2014-02-07 01:30 题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点 ...
随机推荐
- WordPress强制跳转https教程
在互联网火热的今天,安全问题显得越来越重要,为了用户信息安全,很多热门网站都启用了https 有小伙伴就问:我启用了https,为什么访问的时候显示的还是http呢? 其实,有时候并不是因为我们ssl ...
- python自动化--mock、webservice及webdriver模拟手机浏览器
一.mock实现 自定义一个类,用来模拟未完成部分的开发代码 class Say(): def say_hello(self): pass 自定义返回值 import unittest from un ...
- [算法天天练] - C语言实现双向链表(一)
双向链表是比较常见的,主要是在链表的基础上添加prev指针,闲话少说直接上代码吧(这个也是网上一个大神的思路,真心不错,条理清楚,逻辑缜密) 主要也是为了学习,贴上我所调试成功的代码(Linux环境下 ...
- MyBatis 之一 简介
什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...
- 本地调试hbase
需求说明 如果要本地调试Hbase程序,那么可以用本地连接集群的方式 配置文件 在maven里,配置文件cluster.properties放在target/classes里 cluster.prop ...
- Java代码实现WORD转PDF
第一步: 安装OpenOffice 在此良心提供windows版本安装文件 链接:https://pan.baidu.com/s/17pPCkcS1C46VtLhevqSgPw 密码:vmlu ...
- 洛谷P1107 & BZOJ1270 [BJWC2008]雷涛的小猫
一道DP. 给你一个矩阵里面有很多数,你需要从上往下找到一种跳跃方法使得经过的点的价值之和最大. 具体题面见链接 洛谷P1107 BZOJ1270 很明显是一个二维的DP. #include<b ...
- 搜索--P1605 迷宫
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
- Python爬虫常用库安装
建议更换pip源到国内镜像,下载会快很多:https://www.cnblogs.com/believepd/p/10499844.html requests pip3 install request ...
- response对象处理HTTP文件头(禁用缓存、设置页面自动刷新、定时跳转网页)
response对象处理HTTP文件头 制作人:全心全意 禁用缓存 在默认情况下,浏览器将会对显示的网页内容进行缓存.这样,当用户再次访问相关网页时,浏览器会判断网页是否有变化,如果没有变化则直接显示 ...