`
u010815305
  • 浏览: 28324 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

合并两个有序链表后组成一个更大一个有序链表

 
阅读更多
题目描述:

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
(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
#include<stdio.h>
#include<stdlib.h>

struct ListNode
{
	int     m_nValue;
	ListNode* m_pNext;
};
ListNode* merge(ListNode* pHead1,ListNode* pHead2)
{
	if(pHead1==NULL)
		return pHead2;
	if(pHead2==NULL)
		return pHead1;
	
	ListNode* pMergeHead=NULL;
	if(pHead1->m_nValue<pHead2->m_nValue)
	{
		pMergeHead=pHead1;
		pMergeHead->m_pNext = merge(pHead1->m_pNext,pHead2);
	}
	else
	{
		pMergeHead=pHead2;
		pMergeHead->m_pNext =merge(pHead1,pHead2->m_pNext); 
	}
	return pMergeHead; 
} 
ListNode* createList(int number)
{
	if(number<=0)
		return NULL;
	ListNode* pHead=NULL;

	int headData;
	scanf("%d",&headData);
	
	pHead=(ListNode*)malloc(sizeof(ListNode));
	if(pHead==NULL)
		exit(0);
	pHead->m_nValue=headData;
	pHead->m_pNext=NULL;
	ListNode* pCur=pHead;
	for(int i=0;i<number-1;i++)
	{
		int pData;
		scanf("%d",&pData);
		ListNode* pNode = (ListNode*)malloc(sizeof(ListNode));
		if(pNode==NULL)
			exit(0); 
		pNode->m_nValue=pData;
		pNode->m_pNext=NULL;
		
		pCur->m_pNext=pNode;
		pCur=pCur->m_pNext; 
	}

	return pHead;
}
int main()
{
	int number1,number2;
	printf("please input the two number:\n");
	scanf("%d %d",&number1,&number2);
	ListNode* pHead1 =createList(number1);
	ListNode* pHead2 =createList(number2);
	
	ListNode* mergeHead = merge(pHead1,pHead2);
	
	if(mergeHead!=NULL)
	{
		while(mergeHead!=NULL)
		{
			printf("%d\t",mergeHead->m_nValue);
			mergeHead=mergeHead->m_pNext;
		}
	}
	return 0;
}
结果:
分享到:
评论

相关推荐

    leetcode苹果-leetcode:数据结构和算法

    合并两个有序链表 19. 删除链表的倒数第N个节点 876. 链表的中间结点 快慢指针 (TODO) 第 19 题: 倒数第 k 个结点 第 141 题:环形链表 第 142 题:环形链表 II 第 161 题:相交链表 第 206 题:反转链表 第 24 ...

    LeetCode判断字符串是否循环-Data-Structures-and-Algorithms:记录学习数据结构与算法的笔记

    合并两个有序链表 141: 判断链表中是否有环 206: 反转单链表 876: 求链表中间结点 题目分类 栈 20: 有效的括号 155: 最小栈 232: 用栈实现队列(todo) 844: 比较含退格的字符串 224: 基本计算器 682: 棒球比赛 496: ...

    分割数组求最大差值leetcode-LeetCodeAlgorithm:记录日常算法题,提升编码能力

    21.合并两个有序链表 Easy 206.反转链表 Easy 922.按奇偶排序树组II Easy 20.有效的括号 Easy 232.堆实现队列 Easy 496.下一个更大元素 Easy 541.反转字符串II Easy 950.按递增顺序显示卡牌 Medium 24.两两交换链表...

    javalruleetcode-Leetcode-Java:Leetcode-Java

    合并两个有序链表 ListNode 22 23 24 25 26 双指针,已排好序,后面找到的元素只需判断与所求数组(重新排序)的最后一个不相等,就可以进行赋值了 Array 27 双指针,保留两个指针 i和 j,其中 i是慢指针,j是快指针 ...

    leetcode中文版-daily_algorithm::fire:算法进阶,由浅入深,欢迎加入一起共勉(Adailyalgorithm,Welcome

    两个有序链表的合并 : 删除链表倒数第 n 个结点 : 求链表的中间结点 栈 : 有效的括号 : 最小栈 : 基本的计算器 : 下一个更大元素(LeetCode 496) : 棒球比赛(LeetCode 682) : 比较含退格的字符串(LeetCode 844) 队列 ...

    算法导论(part1)

    ·动态规划的两个应用(第15.1节和第15.5节)。 ·利用随机化和线性规划技术的近似算法(第35.4节)。 ·为了使更多的算法可以更早地在书中出现,第1版中有关数学背景知识的三章内容从第一部分移到了附录中,即现在...

    leetcode中国-leetcode-cn:leetcode-cn.com题解(Python3/Java/JavaScript)

    合并两个有序链表 简单 26 从排序数组中删除重复项 简单 28 实现strStr() 简单 36 有效的数独 中等 38 数数并说 简单 48 旋转图像 中等 66 加一 简单 102 二叉树的层次遍历 中等 104 二叉树的最大深度 简单 118 ...

    世界500强面试题.pdf

    1.3.2. 输入一个单向链表,输出该链表中倒数第 k 个结点............................. 44 1.3.3. 输入一个已经按升序排序过的数组和一个数字.................................... 46 1.3.4. 输入一颗二元查找树,...

    算法导论(part2)

    ·动态规划的两个应用(第15.1节和第15.5节)。 ·利用随机化和线性规划技术的近似算法(第35.4节)。 ·为了使更多的算法可以更早地在书中出现,第1版中有关数学背景知识的三章内容从第一部分移到了附录中,即现在...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     EXP_FULL_DATABASE, IMP_FULL_DATABASE这两个角色用于数据导入导出工具的使用。  自定义角色 Oracle建议我们自定义自己的角色,使我们更加灵活方便去管理用户  创建角色 SQL&gt; create role admin;  授权给...

    IOI国家集训队论文集1999-2019

    骆 骥 -《由"汽车问题"浅谈深度搜索的一个方面——搜索对象与策略的重要性》 毛子青 -《动态规划算法的优化技巧》 俞 玮 -《基本动态规划问题的扩展》 张一飞 -《求N!的高精度算法》 ## 2002 戴德承 -《退...

Global site tag (gtag.js) - Google Analytics