将两个递增的有序链表合并为一个递增的有序链表.【数据结构】【线性表】

这篇具有很好参考价值的文章主要介绍了将两个递增的有序链表合并为一个递增的有序链表.【数据结构】【线性表】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


编写一个函数完成如下功能:将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来的链表空间,不另外占用其他的存储空间。表中不允许有重复的数据。

要求,在主函数中调用上面的函数测试。

提示:还需要定义其他函数,比如初始化链表,构造单链表,输出单链表。


#include<iostream>
using namespace std;
//定义单链表
typedef struct  LNode
{
	int data;
	struct LNode *next;
}LNode,*LinkList;
//初始化单链表
int InitList(LinkList &L)
{
	L = new LNode;
	L->next = NULL;
	return 0;
}
//构造单链表
int ConsList(LinkList &L)
{
	cout << "输入赋值的个数:" ;
	int n;
	cin >> n;
	LinkList r = L;
	cout << "输入链表:";
	for (int i = 0; i < n; i++) {
		LinkList p = new LNode;
		cin >> p->data;
		p->next = NULL;
		r->next = p;
		r = p;
	}
	return 0;
}
//合并
void MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC){
	LinkList pa = LA->next;     
	LinkList pb = LB->next;
	LC = LA;
	LinkList pc = LC;
	while (pa && pb)
	{
		if (pa->data < pb->data)
		{
			pc->next = pa;
			pc = pa;
			pa = pa->next;
		}
		else if(pb->data<pa->data)
		{
			pc->next = pb;
			pc = pb;
			pb = pb->next;
		}
		else
		{
			pc->next = pa;
			pc = pa;
			pa = pa->next;
			LinkList p = pb;
			pb = pb->next;
			delete p;
		}
	}
	if (pa) 
	{
		pc->next = pa;
	}
	else
	{
		pc->next = pb;
	}
	delete LB;
}
//输出链表
void print(LinkList L){
	LinkList p = L->next;
	while(p)
	{
		cout << p->data<<" ";
		p = p->next;
	}
}
int main() 
{
	cout << "请输入第一个递增的链表:"<<endl;
	LinkList LA, LB, LC;
	InitList(LA);
	ConsList(LA);
	cout << "请输入第二个递增的链表:"<<endl;
	InitList(LB);
	ConsList(LB);
	MergeList_L(LA,LB,LC);
	cout << "合并为一个递增的链表后为:";
	print(LC);
	return 0;
}

输出结果: 

将两个递增的有序链表合并为一个递增的有序链表,链表,数据结构,c++文章来源地址https://www.toymoban.com/news/detail-741405.html

到了这里,关于将两个递增的有序链表合并为一个递增的有序链表.【数据结构】【线性表】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】--oj_合并两个有序链表(详解)

    目录 方法一:无头结点的方法  方法二:有头结点的方法 题述: 已给函数头: struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) 已给出链表的结构体定义: struct ListNode {     struct ListNode* next;     int val; }; 已知l1、l2分别指向两个链表 要求: 将两个升序链表合并为一

    2024年02月07日
    浏览(44)
  • 合并两个有序链表,将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

    题记: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入 :l1 = [1,2,4], l2 = [1,3,4] 输出 :[1,1,2,3,4,4] 示例 2: 输入 :l1 = [], l2 = [] 输出 :[] 示例 3: 输入 :l1 = [], l2 = [0] 输出 :[0] 提示: 两个链表的节点数

    2024年02月07日
    浏览(46)
  • 27、链表-合并两个有序链表

    这道题不需要集合放入两个链表再进行重排序,只需要两个指针,按大小进行遍历,代码如下:  

    2024年04月14日
    浏览(35)
  • 合并两个有序链表

    题目链接 :力扣21,合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 首先我们能够想到的就是 遍历一遍数组,判断两个结点的大小,将数值小的结点放在前面,数值大的不断尾插在后面 。是不是听

    2023年04月27日
    浏览(30)
  • 21. 合并两个有序链表

     

    2024年02月12日
    浏览(21)
  • 21.合并两个有序链表

    一、思路 二、源码 创建一个新链表 两个链表比较,小于等于取下来尾插 循环结束条件为任意一个链表为空 最后将之剩下的链表直接尾插

    2024年01月23日
    浏览(27)
  • 【链表OJ 5】合并两个有序链表

    前言:          🎈欢迎大家来到Dream_Chaser~的博客🎈         本文收录于 C--数据结构刷题的专栏中 --http://t.csdn.cn/n6UEP         首先欢迎大家的来访,其次如有错误,非常欢迎大家的指正!我会及时更正错误! 目录 一.合并两个有序链表 1.1核心逻辑         1.2两

    2024年02月13日
    浏览(26)
  • 合并两个有序链表——力扣21

    题目描述 法一 递归

    2024年02月15日
    浏览(32)
  • 力扣21. 合并两个有序链表

    题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  链接:21. 合并两个有序链表 - 力扣(LeetCode) 题解 设置两个指针head和tail,head用来指向新链表的头结点,tail用来进行新链表的尾插。比较两个链表,取较小的结

    2024年02月16日
    浏览(39)
  • 【每日算法 && 数据结构(C++)】—— 03 | 合并两个有序数组(解题思路、流程图、代码片段)

    An inch of time is an inch of gold, but you can’t buy that inch of time with an inch of gold. An inch of time is an inch of gold, but you can\\\'t buy that inch of time with an inch of gold 给你两个有序数组,请将两个数组进行合并,并且合并后的数组也必须有序 这个题目要求将两个有序数组合并成一个有序数组。在数

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包