首页 > 其他分享 >力扣刷题之旅——21. 合并两个有序链表

力扣刷题之旅——21. 合并两个有序链表

时间:2024-07-03 11:02:25浏览次数:21  
标签:力扣 21 list1 struct list2 链表 while 指针

I 理解题目需求

II 设计程序(参考:Violent-Ayang)

III 程序解析

IV 程序相关知识点

1.结构体(struct):

2.指针(*):

3.循环(while)和条件语句(if和else):



I 理解题目需求

1.合并两个已经是升序排列的链表

2.将它们合并为一个新的、也是升序排列的链表。

3.合并后的链表需要包含两个输入链表中的所有节点。

4.节点值需要保持升序排列。

5.使用题目模板


II 设计程序(参考:Violent-Ayang

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
    struct ListNode head;
    head.next = list1;
    struct ListNode* q = &head;
    while(list1&&list2){
        if(list1->val<list2->val){
            q->next = list1;
            list1 = list1->next;
        }else{
            q->next = list2;
            list2 = list2->next;
        }
        q = q->next;
    }
    q->next = list1==NULL?list2:list1;
    return head.next;
}

III 程序解析

        函数mergeTwoLists接收两个链表list1list2作为输入,返回一个新的链表,该链表是list1list2合并后的结果。

        函数内部首先定义了一个虚拟头节点head,并将其下一个节点指向list1。然后,定义了一个指针q,初始时指向head

        接下来,使用一个while循环来遍历list1list2。在循环中,比较list1list2的当前节点的值,将较小的节点连接到q的下一个节点,并将对应的链表指针向前移动一位。同时,将q指向当前合并后的链表的最后一个节点。

        当list1list2中的一个链表遍历完毕后,将另一个链表的剩余部分连接到q的下一个节点。最后,返回虚拟头节点的下一个节点,即合并后的链表的头节点。

        这个函数的时间复杂度为O(m + n),其中m和n分别是两个链表的长度。空间复杂度为O(1),因为除了输入链表之外,函数只使用了固定数量的额外空间。


IV 程序相关知识点

        这个函数使用了C语言中的结构体(struct)、指针(*)、循环(while)和条件语句(ifelse)这四个C语言的基本知识点

1.结构体(struct):

        结构体是一种复合数据类型,用于将多个不同数据类型的数据组合在一起。结构体中的每个元素可以定义为任意数据类型,包括整数、浮点数、字符、布尔值等。结构体可以用来表示复杂的数据结构,例如一个学生信息,可以包含学号、姓名、年龄等信息。

结构体定义的基本语法如下:

struct 结构体名 {
    数据类型1 变量名1;
    数据类型2 变量名2;
    ...
};

例如,我们定义一个表示学生的结构体:

struct Student {
    char name[100];
    int age;
    float score;
};

        在这个例子中,我们定义了一个名为Student的结构体,其中包含三个成员变量:name(字符数组,用于存储学生姓名)、age(整数,用于存储学生年龄)和score(浮点数,用于存储学生成绩)。

        结构体可以作为函数的参数,也可以作为函数的返回值。例如,我们可以定义一个函数printStudent,用于打印学生信息:

void printStudent(struct Student s) {
    printf("Name: %s\n", s.name);
    printf("Age: %d\n", s.age);
    printf("Score: %.2f\n", s.score);
}

        在这个例子中,printStudent函数接受一个Student结构体类型的参数s,并打印其成员变量的值。

2.指针(*):

        指针是C语言中一种特殊的变量,它可以指向一个变量、一个结构体或一个函数。使用指针可以实现对变量或函数的间接访问。指针的声明和定义的基本语法如下:

数据类型 *指针名;

例如,我们定义一个指向整数的指针p

int *p;

在这个例子中,我们定义了一个名为p的指针,它指向一个整数类型变量。

        指针可以用于访问和操作指向的变量。例如,我们可以使用指针p来访问和修改其指向的整数a的值:

int a = 10;
p = &a; // 将指针p指向变量a的内存地址
*p = 20; // 通过指针p访问和修改a的值

        在这个例子中,我们首先定义了一个整数变量a,然后使用&运算符获取a的内存地址,并将结果赋值给指针p。然后,我们通过*p操作符访问和修改指针p指向的整数a的值。

3.循环(while)和条件语句(if和else):

循环(while)和条件语句(ifelse)是C语言中的基本控制结构,用于控制程序的执行流程。

  • while循环:

while循环用于在给定条件为真时重复执行一段代码。基本语法如下:

while (条件表达式) {
    代码块;
}

例如,我们使用while循环计算1到10的整数和:

int i, sum = 0;
i = 1;
while (i <= 10) {
    sum += i;
    i++;
}

        在这个例子中,我们定义了一个整数变量i和一个变量sum,初始时i为1,sum为0。然后,我们使用while循环,当i小于等于10时,将i的值加到sum上,并将i加1。循环结束后,sum的值就是1到10的整数和。

  • ifelse语句:

ifelse语句用于根据特定条件执行不同的代码块。基本语法如下:

if (条件表达式) {
    代码块;
} else {
    代码块;

标签:力扣,21,list1,struct,list2,链表,while,指针
From: https://blog.csdn.net/qq_47327611/article/details/140145122

相关文章

  • 用ADSP-21569做A2B的开发的保姆级教程六:Fireworks源码
    作者的话我在前面已经写了5篇,补充一篇更新:Fireworks源码关于A2B,我写过非常多的文章,都是基于ADI公司的A2B开发板参考设计来写的,在真实世界里,主机厂们用到了ADSP-21565、ADSP-21569,甚至ADSP-21593来做座舱的音响设计,整车的NVH,这些应用全部都涉及到了A2B,也就是所谓的汽车音......
  • FL Studio 21中文破解版,内置激活补丁安装激活使用指南
     FLStudio21在音频质量和性能上也达到了新的高度。它采用了先进的音频处理技术,确保了音频的清晰度和真实度。同时,其强大的处理能力使得用户可以同时运行多个音轨和效果器,而不会出现卡顿或延迟。此外,FLStudio21还提供了丰富的插件和扩展功能,使得用户能够更加方便地与其他......
  • 力扣每日一题 7/2 数学、数论、数组/双指针
    博客主页:誓则盟约系列专栏:IT竞赛专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞......
  • 集中式DTU站所终端2021版-主控核心单元
    适用范围:APT-6600J集中式DTU站所终端产品适用于10KV、35KV及以下的配电站、室内开闭所、配电房、户外环网柜、环网箱、箱变等。可实现数据实时采集,远程控制、故障就地动作、主站加密通讯、北斗/GPS对时,并集成线损测量、远程通讯模块、就地通讯模块、标准化运维等功能,最大支......
  • C语言编程-基于单链表实现贪吃蛇游戏
    基于单链表实现贪吃蛇游戏1.定义结构体参数蛇行走的方向蛇行走的状态蛇身节点类维护蛇的结构体型2.游戏运行前预备工作定位光标位置游戏欢迎界面绘制游戏地图(边界)初始化游戏中的蛇身创建食物3.游戏运行下一个位置是食物,就吃掉食物,释放该节点下一个位置不是......
  • 【力扣 - 每日一题】3115. 质数的最大距离(一次遍历、头尾遍历、空间换时间、埃式筛、
    原题链接题目描述给你一个整数数组nums。返回两个(不一定不同的)质数在nums中下标的最大距离。示例1:输入:nums=[4,2,9,5,3]输出:3解释:nums[1]、nums[3]和nums[4]是质数。因此答案是|4-1|=3。示例2:输入:nums=[4,8,2,8]输出:0解释:nums[2]是质......
  • 21_面向对象
    01_面向对象以类的方式组织代码,以对象方式封装数据三大特性:封装,继承,多态静态方法和非静态方法//静态方法,和类一起加载publicstaticvoida(){}//非静态方法,类实例化之后才存在publicvoidb(){}值传递publicstaticvoidmain(String[]args){inta......
  • 【漏洞复现】LiveGBS user/save 逻辑缺陷漏洞(CNVD-2023-72138)
    0x01产品简介LiveGBS是安徽青柿信息科技有限公司研发的一款国标(GB28181)流媒体服务软件,可提供提供用户管理及Web可视化页面管理,开源的前端页面源码;提供设备状态管理,可实时查看设备是否掉线等信息等。0x02漏洞概述LiveGBSuser/save接口处存在逻辑缺陷漏洞,未经身份验......
  • 【IEEE出版】第六届电子与通信,网络与计算机技术国际学术会议(ECNCT 2024,7月19-21)
    第六届电子与通信,网络与计算机技术国际学术会议(ECNCT2024)将于2024年7月19日-21日在中国·广州举办,为期三天。会议由广东工业大学自动化学院主办,会议将安排主旨报告,口头报告以及海报展示,主题包括通信技术及应用,计算机工程,网络工程和应用技术,电子和电气工程等。本......
  • 《DNK210使用指南 -CanMV版 V1.0》第七章 基于CanMV的MicroPython语法开发环境搭建
    第七章基于CanMV的MicroPython语法开发环境搭建1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/......