链表题(3)

链表题

正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
本篇内容继续给大家带来链表的一些练习题

链表分割

知识点:
编程基础 链表
描述:
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

链接:

https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId=8&&tqId=11004&rp=2&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking

比如:输入5 3 2 1 2 7 8 9
x值:4
输出:
3 2 1 2 5 7 8 9

思路:
那么我们可以用两个链表来分别封装小于x值的链表,和大于x值的链表,之后让链表1的尾节点指向链表2的头节点即可。

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        struct ListNode* head1,* tail1,* head2,*tail2;//定义链表1、2的头节点和循环指针
        head1=tail1=(struct ListNode*)malloc(sizeof(struct ListNode));//开辟哨兵位
        head2=tail2=(struct ListNode*)malloc(sizeof(struct ListNode));//开辟哨兵位
        struct ListNode* cur=pHead;//cur指针遍历
        while(cur)//遍历原链表
        {
            if(cur->val<x)//如果小于x值都赋给链表1
            {
                tail1->next=cur;//cur赋值给哨兵位指向的下一个节点
                tail1=tail1->next;//链表1移动
            }
            else //大于x值赋给链表2
            {
                tail2->next=cur;//cur赋值给哨兵位指向的下一个节点
                tail2=tail2->next;//链表2移动
            }
            cur=cur->next;//原链表移动 
        }
        tail1->next=head2->next;//将两个链表连起来,让链表1的尾指针指向链表2的哨兵位指向的节点
        tail2->next=NULL;//链表2尾指针指向空指针
        pHead=head1->next;//链表1哨兵位指向的节点充当新的头节点
        free(head1);//释放链表1和链表2的哨兵位
        free(head2);
        return pHead;//返回新的头节点
    }
};

思路很简单,用带有哨兵位的链表的话,代码实现起来也不是很难,不用哨兵位就有些难度,大家可以尝试一下,具体解释请看代码注释。

在这里插入图片描述

反转链表

题目描述:
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:

在这里插入图片描述
示例2:
在这里插入图片描述
示例3:

在这里插入图片描述
提示:

链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000

题目链接:

https://leetcode.cn/problems/reverse-linked-list/description/

我们可以用3个指针来解决这个问题,n1指向空指针,n2指向头节点,n3指向第二个节点,每次循环我们让n2的next指向n1,然后把n2赋给n1,n3赋给n2,n3向后移动,遍历这个链表就可以,下一次循环就会让第二个节点的next指向第一个节点了。当n2为空指针的时候,说明已经反转进行完毕了。
图示如下:

在这里插入图片描述

struct ListNode* reverseList(struct ListNode* head) {
    if(head==NULL)//链表为空情况直接返回空指针
        return NULL;
    struct ListNode* n1=NULL;//n1初始为空指针
    struct ListNode* n2=head;//n2初始为原链表头节点
    struct ListNode* n3=head->next;//n3初始为第二个节点
    while(n2)//循环
    {
        n2->next=n1;n2的next指向n1
        n1=n2;//n2的位置给n1
        n2=n3;//n3的位置给n2
        if(n3)//只要n3不为空指针也就是n3没有走完原链表的最后一个节点
            n3=n3->next;//n3就向后移动至空指针
    }
    return n1;//返回n1,此时的n1为新链表的头节点,也就是原链表的尾节点
}

思路已经确定了,那么代码也十分容易实现,若有不理解的看注释,相信大家一定能没明白。
在这里插入图片描述
(最后截图取自力扣网,若侵权必删除。)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

北京智达鑫业信息咨询有限公司专业的信息技术服务领域资质认证解决方案供应商

北京智达鑫业信息咨询有限公司成立于2014年1月8日&#xff0c;注册资本为500万元人民币.公司主要致力于信息化项目的资质咨询、指导、和培训服务&#xff0c;以及为互联网技术领域服务的企业。主要业务有&#xff1a;&#xff08;CS&#xff09;信息系统建设和服务能力评估、&a…

vue 数字软键盘 插件 封装 可拖动

1、效果图 2、使用方式 <Keyboard v-if"show" close"show false" :inputDom"$refs.input" /> 封装的数字键盘 Keyboard.vue 组件代码 <template><divclass"keyboard"ref"keyboard":style"{ left: …

《QT从基础到进阶·二十四》按钮组QButtonGroup,单选框QRadioButton和多选框QCheckBox

1、按钮组QButtonGroup 如果有多个单选按钮&#xff0c;可以统一放进一个按钮组。 图中有三个单选按钮放进了一个QGroupBox,并且设置了水平布局&#xff0c;现在要将这三个单选按钮放进一个按钮组&#xff0c;之前的想法是先把三个按钮加入按钮组&#xff0c;再把按钮组放进QG…

图的表示与基础--Java

1.图的基础知识 该图片来自于&#xff1a; https://b23.tv/KHCF2m6 2.稀疏图与稠密图 G(V,E)&#xff1a;V顶点个数&#xff0c;E边的个数 稀疏图&#xff1a;E<<V 一般用邻接表表示(数组链表) 稠密图&#xff1a;E接近V 一般用邻接矩阵表示&#xf…

S32K3基础学习 linker链接器脚本ld文件的学习(一)

一、简介 最近学习NXP新推出的S32K3系列芯片&#xff0c;我在学习容易转牛角尖&#xff0c;非得要搞明白这个芯片的启动流程&#xff0c;所以花费了一些时间&#xff0c;进行查阅资料进行学习&#xff0c;这里做下详细的记录&#xff0c;希望有用&#xff0c;如果有错误欢迎指正…

海上船舶交通事故VR模拟体验低成本高效率-深圳华锐视点

在海上运输行业&#xff0c;安全事故的防范和应对能力是企业安全教育的重中之重。针对这一问题&#xff0c;海上运输事故VR模拟逃生演练成为了一种创新且高效的教育手段。通过这种演练&#xff0c;企业能够在提升员工安全意识和技能方面获得多方面的帮助。 在VR船舶搜救演练中&…

第十五章,输入输出流例题

package 例题;import java.io.File;public class 例题1 {public static void main(String[] args) {//创建文件对象File file new File("D:\\Java15-1.docx");//判断&#xff0c;如果该文件存在。exists存在的意思if (file.exists()) {//删除//file.delete();//Syst…

轻量封装WebGPU渲染系统示例<28>- MRT纹理(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/MRT.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下: export class MRT {private mRscene new RendererScene();initial…

拼多多商品详情API接口接入流程如下:

拼多多商品详情API接口可以用于获取拼多多商品的具体信息&#xff0c;包括商品ID、商品名称、价格、销量、评价等。以下是使用拼多多商品详情API接口的步骤&#xff1a; 进入拼多多开放平台&#xff0c;注册并登录账号。在开放平台页面中&#xff0c;找到“商品详情”或“商品…

DDD领域驱动设计模式结构图面向接口编程

DDD领域驱动设计模式结构图面向接口编程 9.资源库 在刚接触资源库(Repository)时&#xff0c;第一反应便是这就是个 DAO 层&#xff0c;访问数据库&#xff0c;然后吧啦吧啦&#xff0c;但是&#xff0c;当接触的越久&#xff0c;越发认识到第一反应是错的&#xff0c;资源库更…

No194.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

azkaban的安装

一、下载上传文件 二、创建目录 mkdir /opt/soft/azkaban 三、解压 tar -zxvf /opt/install/azkaban-db-3.84.4.tar.gz -C /opt/soft/azkaban tar -zxvf /opt/install/azkaban-exec-server-3.84.4.tar.gz -C /opt/soft/azkaban tar -zxvf /opt/install/azkaban-web-server-…

Ultipa 支持OpenCypher,助力企业级应用发展

OpenCypher 是欧美图数据库厂家 Neo4j 基于其图查询语言Cypher 开发的一套开源图查询语言&#xff0c;该语言也是开发者们较为熟悉的图查询语言之一。 Ulitpa Graph&#xff08;嬴图&#xff09;于2022年6月实现的对OpenCypher 的支持&#xff0c;旨在让用户能够通过自己熟悉的…

APP攻防-资产收集篇反证书检验XP框架反代理VPN数据转发反模拟器

文章目录 常见问题防护手段 常见问题 没有限制过滤的抓包问题&#xff1a; 1、抓不到-工具证书没配置好 2、抓不到-app走的不是http/s 有限制过滤的抓包问题&#xff1a; 3、抓不到-反模拟器调试 4、抓不到-反代理VPN 5、抓不到-反证书检验 做移动安全测试时&#xff0c;设置…

Java中所有的运算符,以及运算符优先级(总结)

运算法是一种特殊的符号&#xff0c;用于表示数据的运算、复制、比较等。 1、算数运算符 // % 取余运算&#xff1a;结果的符号和被模数的符号一致 12 % 5 2 -12 % 5 -2 12 % -5 2 -12 % -5 -2int a1 10; int b1 a1; // a111, b111 int a2 10; int b2 a2; // a211, …

频域分析实践介绍

频域分析实践介绍 此示例说明如何执行和解释基本频域信号分析。该示例讨论使用信号的频域表示相对于时域表示的优势&#xff0c;并使用仿真数据和真实数据说明基本概念。该示例回答一些基本问题&#xff0c;例如&#xff1a;FFT 的幅值和相位的含义是什么&#xff1f;我的信号是…

谈谈Vue双向数据绑定的原理

目录 一、什么是Vue.js 二、什么是双向数据绑定 三、双向数据绑定的原理 一、什么是Vue.js Vue.js是一款流行的JavaScript前端框架&#xff0c;用于构建用户界面。它是一个轻量级、灵活而高效的框架&#xff0c;被广泛应用于单页应用程序和可交互的前端界面开发。Vue.js的设…

Jmeter+ant+Jenkins持续集成

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

同济 MBA 携手和鲸课程共建,以数智人才培养持续赋能企业数字化转型

数智化的浪潮席卷全球&#xff0c;我国产业界应如何做出应变&#xff1f;各企业又该如何深化数字化转型&#xff1f;在任重道远的持续探索中&#xff0c;数智人才培养作为企业实现成功转型的关键要素&#xff0c;已然成为大势所趋。 同济大学综合 MBA 项目高度重视工商管理人才…

2023年【建筑电工(建筑特殊工种)】找解析及建筑电工(建筑特殊工种)复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 建筑电工(建筑特殊工种)找解析是安全生产模拟考试一点通生成的&#xff0c;建筑电工(建筑特殊工种)证模拟考试题库是根据建筑电工(建筑特殊工种)最新版教材汇编出建筑电工(建筑特殊工种)仿真模拟考试。2023年【建筑电…