试写一算法将两个递增有序的带头结点的单链表合并为一个递增有序的带头结点的单链表。(利用原表结点空间)

试写一算法将两个递增有序的带头结点的单链表合并为一个递增有序的带头结点的单链表。
(利用原表结点空间)

比如现在要将下面两个链表合并,这里是要求利用原表空间
在这里插入图片描述
我们先创建一个辅助的链表L3,用p和q分别标记L1和L2的数据元素,tmp标记L3的尾结点
在这里插入图片描述

比较p和q数据大小,显然这里是p更小,让L3连上p
在这里插入图片描述

p=p->next
在这里插入图片描述
再次比较p和q元素大小,这里p>q
tmp尾部接上q
在这里插入图片描述
tmp=tmp->next
q=q->next;
在这里插入图片描述
后面的以此类推

代码如下

//L1和L2递增,利用原表空间进行合并成一个递增序列
void merge(LinkList L1,LinkList L2,LinkList* L3) {//我们这里把L2的各个元素插到L1上LNode* tmp = *L3;LNode* p = L1->next;LNode* q = L2->next;while (p&&q) {if (p->data < q->data) {tmp->next = p;tmp = tmp->next;p = p->next;}else {tmp->next = q;tmp = tmp->next;q = q->next;}}//到这里有可能是因为某个链读完了,另一个链还没有读完//把没读完的加到L3上while (p) {tmp->next = p;tmp = tmp->next;p = p->next;}while (q) {tmp->next = q;tmp = tmp->next;q = q->next;}}
int main()
{LinkList L1;LinkList L2;InitList2(&L1);//初始化一个带头结点的L1InitList3(&L2);printf("初始链表L1为:");//1,2,3,4,5,6,7,8,9,10print2(L1);printf("\n");printf("初始链表L2为:");//0,2,2,4,4,5print2(L2);LinkList L3=(LNode*)malloc(sizeof(LNode));merge(L1, L2,&L3);printf("\n");printf("L1和L2合并后为:");print2(L3);}

在这里插入图片描述

注:用到的创建链表和打印链表的函数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdbool.h>
#include<malloc.h>
//单链表定义
//链表结点
int A[10] = { 1,2,3,4,5,6,7,8,9,10 };
int B[6] = { 0,2,2,4,4,5 };
typedef struct {//定义单链表结点类型int data;//数据域struct LNode *next;//指针域
}LNode, *LinkList;//带头结点初始化-尾插法
void InitList2(LinkList* L) {(*L) = (LNode*)malloc(sizeof(LNode));(*L)->next = NULL;LNode* rear = (*L);//标记表尾int i = 0;for (i = 0;i < 10;i++) {LNode* p = (LNode*)malloc(sizeof(LNode));//创建一个新结点p->data = A[i];//新结点赋值rear->next = p;//接到L上rear = p;//标记表尾}rear->next = NULL;
}//带头结点初始化-尾插法
void InitList3(LinkList* L) {(*L) = (LNode*)malloc(sizeof(LNode));(*L)->next = NULL;LNode* rear = (*L);//标记表尾int i = 0;for (i = 0;i < 6;i++) {LNode* p = (LNode*)malloc(sizeof(LNode));//创建一个新结点p->data = B[i];//新结点赋值rear->next = p;//接到L上rear = p;//标记表尾}rear->next = NULL;
}void print2(LinkList L) {//打印带头结点的链表LNode* i = L->next;//用i指针遍历整个链表while (i != NULL) {printf("%d ", i->data);i = i->next;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/182611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

L298N模块使用简介

接口作用ENA/ENB使用PWM调节马达转速&#xff08;调速&#xff09;左边一对接口接电机的正负极右边一对接口接电机正负极控制IN1,IN2 控制左边的2个接口的电压&#xff0c;IN1控制一个&#xff0c;IN2控制另外一个 IN1输入3.3V时&#xff0c;OUT1输出3.3v电压&#xff08;可能是…

NoSQL大数据存储技术思考题及参考答案

思考题及参考答案 第1章 绪论 1. NoSQL和关系型数据库在设计目标上有何主要区别&#xff1f; (1)关系数据库 优势&#xff1a;以完善的关系代数理论作为基础&#xff0c;具有数据模型、完整性约束和事务的强一致性等特点&#xff0c;借助索引机制可以实现高效的查询&#xf…

创建Asp.net MVC项目Ajax实现视图页面数据与后端Json传值显示

简述回顾 继上篇文章创建的mvc传值这里说明一下Json传值。在mvc框架中&#xff0c;不可避免地会遇到前台传值到后台&#xff0c;前台接收后台的值的情况&#xff08;前台指view&#xff0c;后台指controller&#xff09;&#xff0c;有时只需要从控制器中返回一个处理的结果&a…

execl点击单元格跳转

通过点击单元格跳转到其它单元格并获取单元格文本对数据进行过滤 平时我们通过超链接可以实现单元格跳转&#xff0c;但是并不能对数据进行过滤 此时我们可以用execl的宏来实现 实现的效果如图: 完整代码下载链接

【上海大学数字逻辑实验报告】二、组合电路(一)

一、 实验目的 熟悉TTL异或门构成逻辑电路的基本方式&#xff1b;熟悉组合电路的分析方法&#xff0c;测试组合逻辑电路的功能&#xff1b;掌握构造半加器和全加器的逻辑测试&#xff1b;学习使用可编程逻辑器件的开发工具 Quartus II设计电路。 二、 实验原理 异或门是数字…

SpringBoot+VUE3前后端分离-【支付宝支付】

1、支付宝沙箱应用申请 https://open.alipay.com/develop/sandbox/app 打开支付宝沙箱能够看到如下信息&#xff1a; 获取到appid&#xff1b; 2、获取应用私钥以及支付宝公钥 在接口加密方式选择公钥模式启用&#xff0c;根据操作即可获取应用公钥、应用私钥以及支付宝公钥…

服务运营 |精选:床位知多少?医院调度的几种建模方法(下)

编者按&#xff1a; 住院流程&#xff08;Inpatient Flow&#xff09;是一种通过协调和优化医院内部流程&#xff0c;以提高患者入院至出院期间的效率和质量的方法。住院流程通常通过医院内部信息系统和协同工作流程进行管理&#xff0c;以确保患者得到及时的诊断、治疗和护理…

Vue组件开发:工具提示组件的实现方法

在Web开发当中&#xff0c;工具提示&#xff08;Tooltip&#xff09;是一种常用的用户界面组件&#xff0c;用于向用户提供额外的信息或说明。它通常以文本形式显示在鼠标悬停或点击某个元素时&#xff0c;为用户提供更详细的内容展示。在本文中&#xff0c;我们将探讨如何使用…

异常数据检测 | Python实现基于高斯概率分布的异常检测

异常数据检测 | Python实现基于高斯概率分布的异常检测 高斯分布也称为正态分布。它可以被用来进行异常值检测,不过我们首先要假设我们的数据是正态分布的。不过这个假设不能适应于所有数据集。但如果我们做了这种假设那么它将会有一种有效的方法来发现异常值。 Scikit-Learn的…

AI PC专题:AI PC深入变革PC产业

今天分享的是AI系列深度研究报告&#xff1a;《AI PC专题&#xff1a;AI PC深入变革PC产业》。 &#xff08;报告出品方&#xff1a;西南证券研究发展中心&#xff09; 报告共计&#xff1a;30页 AI PC将深入变革PC产业  从出货量看&#xff0c;PC整体呈现周期性的特征。2…

微信小程序+中草药分类+爬虫+torch

1 介绍 本项目提供中草药数据集&#xff0c;使用gpu、cpu版本的torch版本进行训练&#xff0c;将模型部署到后端flask&#xff0c;最后使用微信小程序进行展示出来。 数据爬虫可以参考&#xff1a;http://t.csdnimg.cn/7Olus 项目中的爬虫代码&#xff0c;并且本项目提供相同的…

using meta-SQL 使用元SQL (3)

%FirstRows Syntax %FirstRows(n) Description The %FirstRows meta-SQL variable is replaced by database-specific SQL syntax to optimize retrieval of n rows. Depending on the database, this variable optimizes: FirstRows meta-SQL变量被特定于数据库的SQL语法…

反弹shell命令速查

反弹Shell-Linux 【监听端】centos: 192.168.35.152 【被控端】kali: 192.168.35.128# 监听端执行 [root@localhost ~]# nc -vvl 7777 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Listening on :::7777 Ncat: Listening on 0.0.0.0:7777bash ┌──(root@kali)-[/h…

基于YOLOv5的人群计数系统设计系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介系统概述系统功能核心技术系统架构系统优势 二、功能三、系统四. 总结  总结 一项目简介 基于YOLOv5的人群计数系统设计是一个非常有趣且具有挑战性的项目…

离散时间信号的分析(数字信号处理实验1-2)

前言&#xff1a;该系列实验均使用matlab完成&#xff0c;实验课程为《数字信号处理》 文章目录 一.题目二.实验目的三.实验仪器四.实验原理实验所用的matlab函数解析离散时间信号实验原理&#xff1a; 五.实验步骤六.实验代码及实验结果完整代码1.线性卷积代码2.循环卷积运算…

(亲测有效)解决windows11无法使用1500000波特率的问题

大家好&#xff01;我是编码小哥&#xff0c;欢迎关注&#xff0c;持续分享更多实用的编程经验和开发技巧&#xff0c;共同进步。 1、问题描述 从图1可以看出串口是正常的&#xff0c;安装的驱动是CP210xVCPInstaller_x64.exe&#xff0c;但是从图2可以看出&#xff0c;串口拒…

HarmonyOS ArkTS 使用DevEco Studio高效开发(十三)

1、快速开始 打开IDE后&#xff0c;在IDE上边栏有个Help入口&#xff0c;里面有一个Quick Start快速开始入口&#xff0c;点击进去就会进入到快速开始面板。在这个面板中会有一些快速入门的实验指导和一些常用的链接。快速开始相当于一个收藏夹&#xff0c;把最常用的一些学习…

苍穹外卖--添加购物车

购物车数据是关联用户的&#xff0c;在表结构中&#xff0c;我们需要记录&#xff0c;每一个用户的购物车数据是哪些菜品列表展示出来的既有套餐&#xff0c;又有菜品&#xff0c;如果用户选择的是套餐&#xff0c;就保存套餐ID(setmeal_id)&#xff0c;如果用户选择的是菜品&a…

git stash save untracked not staged

git stash save untracked not staged 如图 解决方案&#xff1a; git stash save "tag标记信息" --include-untracked或者&#xff1a; git stash save -u "tag标记信息" git stash clear清空本地暂存代码_zhangphil的博客-CSDN博客文章浏览阅读486次。…

代码的并发问题

List 在遍历时候删除元素 为list添加元素&#xff0c;通过for或者通过foreach删除都存在删除异常&#xff0c;在捕获异常的时候注意异常信息的简化消息传递&#xff0c;容易造成异常错误的简化 Testpublic void testException(){List<Integer> list new ArrayList<…