单链表的相关题目

1.删除链表中给定值val的所有结点

public void removeall(int key) {//由于是删除链表中所有和key值相同的结点,所以可以设置两个ListNode类型的数据,一个在前面,一个在后面.//直到前面的走到链表的最后,这样完成了遍历.//先判断一下这个链表是否为空if(head==null){System.out.println("链表为空");return;}//在判断了不为空之后ListNode cur1=head;ListNode cur2=head.next;//遍历结束的条件是cur2==nullwhile(cur2==null){if(cur2.val==key){//如果相等了,进行删除cur1.next=cur2.next;cur2=cur2.next;}else{//不相等的话,进行后移就好cur1=cur2;cur2=cur2.next;}}//结束了循环之后,还要判断第一个结点是否重复if(head.val==key){head=head.next;}}

2.反转一个链表,首先画一个图介绍一下什么叫反转一个链表.

可以看到在反转了之后,第一个结点变成了最后一个结点,最后一个结点编成了第一个结点.那么可以有两种思路完成这个反转,1.首先拿到最后一个结点,然后从第一个结点开始,以最后一个结点为头结点进行尾插.2.拿到第一个结点,以第一个结点未尾结点进行头插.

 public ListNode reverseList(){//首先判断是否是空表和是否是只有一个结点\if(head==null){System.out.println("空表,无法反转");return null;}if(head.next==null){return null;}//开始头插ListNode cur1=head.next;head.next=null;while(cur1!=null){ListNode cur2=cur1.next;cur1.next=head;head=cur1;cur1=cur2;}return head;}

 3.给定一个带有头结点head的非空链表,返回链表的中间结点.如果有两个结点,则返回第二个结点.

 public ListNode middleNode(){//一个生活中的实例,A的速度是1,B的速度是2,当B到达终点时,A行走的距离是B的一半.//所以根据这个现象,可以设置两个ListNode类型的变量一个一次走两步,一个一次走一步,当速度快的//走到尽头时,速度慢的刚好走到中间ListNode cur1=head.next;ListNode cur2=head.next.next;while(cur2.next==null||cur2==null){cur1=cur1.next;cur2=cur2.next.next;}return cur1;}

4.输入一个链表,输出该链表中倒数第K个结点的数据.

这个题目和上面一个题目可以用同一种方法求解,求导数第k个结点.有两种常想到的思路,思路一:首先遍历链表求出链表的节点个数N,倒数第K个结点就是顺序的第N-K+1个结点,然后遍历到第N-K+1个结点即可.但这种方法需要进行两次遍历.效率较低.思路二:和上一道题目一样,设置两个ListNode类型的变量cur1和cur2,让cur1比cur2多走K-1步,然后让cur1遍历链表,当cur1指向最后一个结点时.cur2指向的就是倒数第k个结点.具体代码如下:

 public ListNode getNode(int k){//首先设置cur1和cur2ListNode cur1=head;ListNode cur2=head;if(head==null){system.out.println("链表为空");return null;}for(int i=1;i<k;i++){cur2=cur2.next;}//这里可以开始循环while(cur2.next!=null){cur2=cur2.next;cur1=cur1.next;}return cur1;}

5.将两个有序链表合成为一个有序链表并返回,新链表是通过拼接给定的两个链表的所有结点组成的.两个有序链表都是升序的.

这一题的思路比较清晰,因为给定的链表都是有序的.可以设置cur1和cur2,遍历两个链表,比较数值区域的大小,然后进行拼接即可.

public static MySingleList.ListNode totalList(MySingleList.ListNode head1,MySingleList.ListNodehead2){//设置一个傀儡结点MySingleList.ListNode newhead=new MySingleList.ListNode(-1);MySingleList.ListNode cur=newhead;//任何一个结点为空时,就要停止遍历while(head1!=null&&head2!=null){if(head1.val<head2.val){cur.next=head1;head1=head1.next;cur=cur.next;}else{cur.next=head2;head2=head2.next;cur=cur.next;}}if(head1!=null){cur.next=head1;}if(head2!=null){cur.next=head2;}return newhead.next;}

6.编写代码,以给定值X为基准将链表分为两部分,所有小于X的结点排在大于或者等于X的结点之前.

可以设置一个cur来遍历链表,将数据域小于X的结点放在一个创建的链表中,将数据域大于X的结点放在另一个创建的链表中,然后将两个链表连接起来即可.具体代码如下:

public ListNode getXList(int x){//首先需要panduanListNode s1=null;ListNode s2=null;ListNode s3=null;ListNode s4=null;ListNode cur=head;//这里要遍历完链表while(cur!=null){if(cur.val<x){//还要判断是否是第一个结点if(s1==null){s1=cur;s2=cur;}else{s2.next=cur;s2=s2.next;}}else{if(s3==null)//同样还是要判断是否是头结点{s3=null;s4=null;}else{s4.next=cur;s4=s4.next;}}cur=cur.next;}//在经过循环之后,接下俩就是需要连接.//连接也有多种情况//1.两个链表都有结点if(s1==null){return s3;}s2.next=s3;if(s3!=null){s4.next=null;}return s1;}

7.链表的回文结构

如何判断上述链表是回文结构呢?可以先找到中间结点,然后把中间结点之后的链表进行翻转,最后依次比较即可.(同时要注意节点个数的奇偶的不同)具体代码如下:

public boolean iscircle(){if(head==null){System.out.println("链表为空")return false;}//总的分为三步//1.找到中间结点,按照前面的方法即可ListNode cur1=head;ListNode cur2=head;//这个结点的速度较快while(cur2!=null&&cur2.next!=null){cur1=cur1.next;cur2=cur2.next.next;}//此时找到了中间结点,接着翻转ListNode cur3=cur2.next;while(cur3!=null){ListNode cur4=cur3.next;cur3.next=cur2;cur2=cur3;cur3=cur4;}//这里就翻转完了.//接着进行比较操作,此时cur2指向的是最后一个结点.//两个相同时就停止while(cur1!=cur2){if(cur1.val!= cur2.val){return false;}if(cur1.next==cur2.next){return true;}cur1=cur1.next;cur2=cur2.next;}return true;}

8.输入两个链表,找出他们的第一个公共结点. 如图两个链表有公共结点.

如何才能够找到两个链表的结点呢?通过观察这个图形可以发现,两个链表的结点个数的差异在未相交之前因此可以通过节点个数相减来确定某个链表需要先遍历的步数,然后同时遍历,走到相同结点时,就找到了第一个公共结点. 

 public static MySingleList.ListNode sameNode(MySingleList.ListNode headA,MySingleList.ListNode headB){//先判断有没有空的链表if(headA==null||headB==null){return null;}int count1=0;int count2=0;MySingleList.ListNode cur1=headA;MySingleList.ListNode cur2=headB;while(cur1!=null){count1++;cur1=cur1.next;}while(cur2!=null){count2++;cur2=cur2.next;}//然后相减,得到相差的步数int len=count1-count2;if(len<0){cur1=headB;cur2=headA;len=count2-count1;}//这里进行移动for(int i=0;i<len;i++){cur1=cur1.next;}while(cur1!=cur2){cur1=cur1.next;cur2=cur2.next;}if(cur1==null){return null;}return cur1;}


 


 

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

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

相关文章

【ArcGIS For JS】前端geojson渲染行政区划图层并加标签

原理 通过DataV工具 生成行政区的geojson&#xff08;得到各区的面元素数据&#xff09;, 随后使用手动绘制featureLayer与Label&#xff0c;并加载到地图。 //vue3加载geojson数据public/geojson/pt.json,在MapView渲染上加载geojson数据 type是"MultiPolygon"fetc…

Android项目实战 —— 手把手教你实现一款本地音乐播放器Dora Music

今天带大家实现一款基于Dora SDK的Android本地音乐播放器app&#xff0c;本项目也作为Dora SDK的实践项目或使用教程。使用到开源库有[https://github.com/dora4/dora] 、[https://github.com/dora4/dcache-android] 等。先声明一点&#xff0c;本项目主要作为框架的使用教程&a…

Unity【入门】环境搭建、界面基础、工作原理

Unity环境搭建、界面基础、工作原理 Unity环境搭建 文章目录 Unity环境搭建1、Unity引擎概念1、什么是游戏引擎2、游戏引擎对于我们的意义3、如何学习游戏引擎 2、软件下载和安装3、新工程和工程文件夹 Unity界面基础1、Scene场景和Hierarchy层级窗口1、窗口布局2、Hierarchy层…

多分支拓扑阻抗匹配

最近测试信号质量&#xff0c;发现在有过冲、振铃等问题的时候大部分硬件工程师喜欢直接调大匹配电阻或者减小驱动电流&#xff0c;虽然这种操作是有效果的&#xff0c;但是我认为应该还可以更严谨的计算下&#xff0c;而不是选几个电阻多次尝试&#xff0c;显得不是很专业。 …

推送镜像到私有harbor仓库

本地已制作镜像&#xff1a;tomcat-8.5.100-centos7.9:1.0。 本地已经搭建私有仓库&#xff1a;harbor.igmwx.com。 现在需要把镜像 tomcat-8.5.100-centos7.9:1.0 推送到harbor。 &#xff08;1&#xff09;查看本地镜像&#xff1a;sudo docker images zhangzkzhangzk:~/d…

java 对接农行支付相关业务(二)

文章目录 农行掌银集成第三方APP1:掌银支付对接快e通的流程1.1 在农行网站上注册我们的app信息([网址](https://openbank.abchina.com/Portal/index/index.html))1.2:java整合农行的jar包依赖1.3:把相关配置信息整合到项目中1.4:前端获取授权码信息1.5:后端根据授权码信…

【动态规划】速解简单多状态类问题

目录 17.16 按摩师 题⽬描述&#xff1a; 解法&#xff08;动态规划&#xff09;&#xff1a; 1. 状态表⽰&#xff1a; 2. 状态转移⽅程&#xff1a; 3. 初始化&#xff1a; 4. 填表顺序 5. 返回值 代码 总结&#xff1a; 213.打家劫舍II&#xff08;medium&#x…

C++ 基于vs2019创建并使用动态链接库(dll)

库的基本认识 静态库&#xff08;Static Library&#xff09; 基本概念&#xff1a;静态库是在编译时链接到目标程序中的库文件。它包含了程序运行所需的所有函数和数据&#xff0c;这些函数和数据会被直接嵌入到最终生成的可执行文件中。静态库通常以.a&#xff08;在Unix-l…

分频器对相位噪声影响

本文我们将分析输入时钟被N分频之后的输出时钟的相位噪声如何变化。首先理想分频器的意思是我们假设分频器不会引入附加相位噪声&#xff0c;并且输入和输出时钟之间没有延时。我们假设每一个输出边沿的位置都完美的与输入边沿相对齐&#xff0c;这样便于分析。由于每N个输入时…

[FlareOn6]Overlong

很简单的逻辑 一度让我以为是加保护了 运行告诉我从未编码,懵逼 动调你也发现,你根本没什么可以操作的空间,密文什么的,都是固定的 但是这里大家发现没 我们只加密了28个密文 然后text是128 也就是 0x80 是不是因为密文没加密完呢 我也懒得去写代码了 汇编直接修改push 字…

axios和ts的简单使用

按照官网的使用案例简单记下笔记 1&#xff1a;安装 npm install axios 2&#xff1a;案例 一个简单的config配置信息 // 发起一个post请求 axios({method: post,url: /user/12345,data: {firstName: Fred,lastName: Flintstone} }); case // 在 node.js 用GET请求获取…

总结常见漏洞的代码审计方法

前言 这篇文章主要是总结一下在安全工作中常见漏洞的代码审计方法&#xff0c;以及修复方案&#xff0c;希望能对初学代码审计小伙伴们有所帮助&#xff0c;笔芯♥️ 代码审计的思路 通常做代码审计都是检查敏感函数的参数&#xff0c;然后回溯变量&#xff0c;判断变量是否可…

【Crypto】RSA

文章目录 题目步骤1.计算 &#x1d45b;2.计算欧拉函数 &#x1d719;(&#x1d45b;)3. 扩展欧几里得算法求逆元 &#x1d451; 解题感悟 题目 p473398607161 q4511491 e17 求d 步骤 1.计算 &#x1d45b; 公式&#xff1a;npq n47339860716145114912135733555619387051 …

初识STM32单片机-TIM定时器

初识STM32单片机-TIM定时器 一、定时器概述二、定时器类型2.1 基本定时器(TIM6和TIM7)2.2 通用定时器(TIM2、TIM3、TIM4和TIM5)2.3 高级定时器(TIM1和TIM8) 三、定时中断基本结构和时基单元工作时序3.1 定时器基本结构3.2 预分频器时序3.3 计数器时序3.3.1 计数器有无预装时序(…

Hono 框架使用经验谈

Hono&#x1f525;是一个小型、快速并开源的 Serverless Web 框架&#xff0c;用 TypeScript 写就。它适用于任何JavaScript运行时&#xff1a;Cloudflare Workers&#xff0c;Fastly ComputeEdge&#xff0c;Deno&#xff0c;Bun&#xff0c;Vercel&#xff0c;Netlify&#x…

动手学操作系统(一、搭建实验环境)

动手学操作系统&#xff08;一、搭建实验环境&#xff09; 文章目录 动手学操作系统&#xff08;一、搭建实验环境&#xff09;1. 在VMware虚拟机中安装ubuntu20.042. 安装Bochs3. 启动计算机Reference &#x1f680; 环境配置 &#x1f680; 笔者的环境使用的是 ubuntu 20.04…

python多线程的使用

Python 多线程探索 在 Python 编程中&#xff0c;多线程是一项强大的技术&#xff0c;它允许我们同时执行多个任务&#xff0c;从而提高程序的效率和响应性。 一、线程的基本概念 线程是进程中的一个执行单元&#xff0c;可以与其他线程共享进程的资源。 二、创建线程 在 P…

Linux:confluence8.5.9的部署(下载+安装+破ji)离线部署全流程

0.环境 Confluence也是比较吃运存了&#xff0c;我建议运行运存给到4g或者4g以上就可以了&#xff0c;核数可以给到1核或以上 我部署在centos7.9操作系统上&#xff0c;ip地址为&#xff1a;192.168.6.1&#xff0c;yum仓库使用的是自己的镜像文件&#xff0c;本章所有使用到…

爱普生XC1011SD为电气稳定控制系统组合式传感器推出解决方案

在现代电力系统中&#xff0c;确保系统的安全和稳定运行至关重要。为了应对这一需求&#xff0c;我们推出了XC1011SD组合式传感器解决方案&#xff0c;它专为电气稳定控制系统设计&#xff0c;提供了卓越的性能和可靠性。 XC1011SD是一款集成陀螺仪传感器和双轴加速度计于一体的…

炸裂!AI五分钟模仿爆款IP故事,涨粉速度太绝了!

‍ ‍大家好&#xff0c;我是向阳。 今天我要分享一个利用AI技术模仿爆款账号的小技巧&#xff0c;帮助大家迅速增加粉丝。这个方法简单实用&#xff0c;尤其适用于副业和本地生活领域。接下来&#xff0c;我将为大家详细讲解操作步骤。让我们开始吧。 副业赚钱&#xff1a;模…