Java刷题篇——单链表练习题上

206. 反转链表 - 力扣(LeetCode)

1. 题目描述

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例1

img

输入:head = [1,2,3,4,5]

输出:[5,4,3,2,1]

示例2

img

输入:head = [1,2]

输出:[2,1]

示例3

输入:head = [ ]

输出:[ ]

提示

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

2. 思路

  1. 判断链表是否为空,如果为空直接返回头结点

  2. 判断链表是否为一个元素,如果是直接返回头结点

  3. head置为null

  4. 定义两个指针,curcurNextcur 指向头结点的next,表示要反转的元素;curNext指向curnext,表示要反转元素的下一个元素

  5. 使用头插法将要反转的元素插入前一个元素的前面

    image-20231218095202374

3.代码

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {if (head == null) { // 链表里一个元素都没有return head;}if (head.next == null) { // 链表里只有一个元素return head;}ListNode cur = head.next; // 要反转的元素head.next = null;while (cur != null) {ListNode curNext = cur.next;// 头插法cur.next = head;head = cur;cur = curNext;}return head;}
}

运行结果:

image-20231218093949377

876. 链表的中间结点 - 力扣(LeetCode)

1.题目描述

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

示例1

img

输入:head = [1,2,3,4,5]

输出:[3,4,5]

解释:链表只有一个中间节点,值为3

示例2

img

输入:head = [1,2,3,4,5,6]

输出:[4,5,6]

解释:链表只有两个中间节点,值分别为3和4,返回第二个节点。

提示

  • 链表的节点的范围是[1,100]
  • 1<= Node.val <= 100

2. 思路

  1. 判断头结点的next是否为空,如果是直接返回头结点
  2. 定义两个指针slowfast,都指向头结点。
  3. 循环遍历链表,每次fast指向fastnextnext(每次移动两步);slow指向slownext(每次移动1步)
  4. 循环条件:fast == null循环结束(链表元素个数为偶数时),fast.next == null循环结束(链表元素个数为奇数时)。

image-20231218103009554

3.代码

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode middleNode(ListNode head) {if (head.next == null) {return head;}ListNode slow = head;ListNode fast = head;while (fast != null && fast.next != null) {fast = fast.next.next;slow = slow.next;}return slow;}
}

运行结果:

image-20231218103101436

链表中倒数第k个结点

1. 题目描述

输入一个链表,输出该链表中倒数第k个结点。

示例1

输入:1,{1,2,3,4,5}

返回值:{5}

2. 思路

  1. 判断k是否合法,如果不合法直接返回null
  2. 判断链表是否为空,如果为空直接返回null
  3. 定义两个指针fastslow都是指向头结点。
  4. fast先走k-1步。
  5. 在让fastslow同时走,当fast.next == null都走到了链表最后一个节点了,同时slow也走到了倒数第K个节点

image-20231218111323296

3.代码

import java.util.*;
/*
public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}*/
public class Solution {public ListNode FindKthToTail(ListNode head, int k) {if (k < 0) { // k为负数return null;}if (head == null){return null;}ListNode fast = head;ListNode slow = head;int count = 0;while (count != (k - 1)) {if (fast.next != null) {fast = fast.next;count++;} else { // k 大于链表长度return null;}}while (fast.next != null) {fast = fast.next;slow = slow.next;}return slow;}
}

运行结果:

image-20231218111819277

21. 合并两个有序链表 - 力扣(LeetCode)

1. 题目描述

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例1

img

输入:l1 = [1,2,4] ,l2 = [1,3,4]

输出:[1,1,2,3,4,4]

示例2

输入:l1 = [] ,l2 = []

输出:[]

示例3

输入:l1 = [] ,l2 = [0]

输出:[0]

2.思路

  1. 创建一个节点newHead为虚拟节点
  2. 开始比较链表的大小,谁大newHead就指向谁,头结点就指向头结点的next
  3. 判断链表是否为空,为空则newHead指向头结点的next

image-20231218120330838

3. 代码

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode newHead = new ListNode(-1);ListNode temp = newHead;while(list1 != null && list2 != null) {if (list1.val < list2.val) {temp.next = list1;list1 = list1.next;temp = temp.next;} else {temp.next = list2;list2 = list2.next;temp = temp.next;}}if (list1 != null) {temp.next = list1;}if (list2 != null) {temp.next = list2;}return newHead.next;}
}

运行结果:

image-20231218120816784

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

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

相关文章

Spring Boot 3 + Vue 3 整合 WebSocket (STOMP协议) 实现广播和点对点实时消息

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

高可用接入层技术演化及集群概述

集群概述 集群的介绍及优势 集群&#xff1a;将多台服务器通过硬件或软件的方式组合起来&#xff0c;完成特定的任务&#xff0c;而这些服务器对外表现为一个整体。集群的优势 高可靠性&#xff1a;利用集群管理软件&#xff0c;当主服务器故障时&#xff0c;备份服务器能够自…

2023年国赛高教杯数学建模D题圈养湖羊的空间利用率解题全过程文档及程序

2023年国赛高教杯数学建模 D题 圈养湖羊的空间利用率 原题再现 规模化的圈养养殖场通常根据牲畜的性别和生长阶段分群饲养&#xff0c;适应不同种类、不同阶段的牲畜对空间的不同要求&#xff0c;以保障牲畜安全和健康&#xff1b;与此同时&#xff0c;也要尽量减少空间闲置所…

代码随想录算法训练营第五十五天 _ 动态规划_392. 判断子序列、115.不同的子序列。

学习目标&#xff1a; 动态规划五部曲&#xff1a; ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录&#xff01; 60天训练营打卡计划&#xff01; 学习内容&#xff1a; 392. 判断子序列 这个题目就是 …

消息队列kafka详解:Kafka原理分析总结

一、概述 Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统&#xff0c;后成为Apache的一部分&#xff0c;它使用Scala编写&#xff0c;以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark等都支持与Kafka集成。 Kaf…

SGPIO介紹

什么是SGPIO&#xff1f; Serial General Purpose Input Output (SGPIO) is a method to serialize general purpose IO signals. SGPIO defines the communication between an initiator (e.g. a host bus adapter) and a target (e.g. a backplaneholding disk drives). The …

最小窗口子串算法题——Java解答

题目&#xff1a;最小窗口子串 题目描述&#xff1a; 给你一个字符串 s 和一个字符串 t&#xff0c;返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 ""。 注意&#xff1a; 对于 t 中重复的字符&#xff…

Axure的交互与情形,事件,动作

交互样式 交互样式是指当用户与原型进行交互时&#xff0c;元素所呈现出的视觉效果。在Axure中&#xff0c;可以通过设置交互样式来调整元素在交互过程中的外观&#xff0c;例如改变颜色、大小、位置等。 交互事件 交互事件是指在用户与原型进行交互时触发的动作。在Axure中&…

一次应急响应记录

背景&#xff1a; 周五晚上&#xff0c;我健身完回到宿舍收到qq消息&#xff0c;原来是安全厂商在扫描资产时&#xff0c;发现一批openssh漏洞如下图&#xff1a; 其实我是一名小白&#xff0c;我的第一反应就是升级openssh版本。但是这里问题又来了&#xff0c;我们内网主机是…

Python 自动化之收发邮件(一)

imapclient / smtplib 收发邮件 文章目录 imapclient / smtplib 收发邮件前言一、基本内容二、发送邮件1.整体代码 三、获取邮件1.整体代码 总结 前言 简单给大家写个如何用Python进行发邮件和查看邮件教程&#xff0c;希望对各位有所帮助。 一、基本内容 本文主要分为两部分…

基于ssm在线作业管理系统的设计与实现论文

摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此学生作业信息的…

Web Worker的快速理解与简单应用

Web Worker 是一种在浏览器环境中运行的脚本它在主线程之外运行&#xff0c;可以在后台执行计算密集型或需要长时间运行的任务&#xff0c;而不会阻塞主线程的执行。Web Worker 通过在独立的线程中执行&#xff0c;可以提高页面的性能和响应性。 实现流程&#xff1a; 主线程&a…

补题与总结:牛客小白月赛83(B~F)

文章目录 写在最前面的复盘B-小天的魔法&#xff08;贪心 模拟 双指针&#xff09;C-小天的 Minecraft&#xff08;概率&#xff09;D-小天的子序列&#xff08;预处理 排列组合&#xff09;E-小天的贪吃蛇&#xff08;模拟&#xff09;F-小天的 AB&#xff08;结论题&#xff…

举个栗子!Tableau 技巧(261):自由切换图表的背景颜色

数据粉反馈了一个有趣的需求&#xff1a;Tableau 图表的背景颜色可以设置多个&#xff0c;然后按需切换么&#xff1f; 我们知道&#xff0c;图表的背景颜色对于可视化分析呈现来说非常重要。大部分情况下&#xff0c;我们会固定使用一种背景色。 如果确实需要切换图表背景颜…

K8s内容器拓扑图工具

1.背景&#xff1a;随着线上容器越来越多&#xff0c;需要一个可视化的方式展示各个容器之间的拓扑图。 2.需求&#xff1a;轻量级&#xff0c;部署方便。 3.部署 helm repo add groundcover https://helm.groundcover.com/ helm repo update helm install caretta --namespa…

代码随想录算法训练营第二十天 | 二叉搜索树

目录 力扣题目 力扣题目记录 654.最大二叉树 617.合并二叉树 用值 用指针 700.二叉搜索树中的搜索 递归 迭代 98.验证二叉搜索树 总结 力扣题目 用时&#xff1a;2h 1、654.最大二叉树 2、617.合并二叉树 3、700.二叉搜索树中的搜索 4、98.验证二叉搜索树 力扣…

JupyterNotebook VS JupyterLab 如果jupyter安装成功,点击jupyterlab即可进入lab环境

简介 JupyterNotebook 是一个款以网页为基础的交互计算环境&#xff0c;可以创建Jupyter的文档&#xff0c;支持多种语言&#xff0c;包括Python, Julia, R等等。一般来说&#xff0c;如果是使用R语言的话&#xff0c;使用Rstudio居多&#xff0c;使用Python的话&#xff0c;使…

如何快速优化几千万数据量的订单表

前言 为了保证有一个更健康的身体&#xff0c;所以慢慢降低了更新频率&#xff0c;在有了更多休息时间的前提下&#xff0c;思考了一下接下来准备分享的一些内容。 决定在更新一些技术干货的同时&#xff0c;会穿插一些架构知识&#xff0c;放在单独的专栏里面&#xff0c;希…

鸿蒙Js实战,计算器功能开发

场景&#xff1a; 通过动态设置按钮组件button实现计算器的键盘&#xff0c;通过文本text显示计算的表达书&#xff0c;可以计算&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;可以一个一个移除&#xff0c;可以重置 等。 下面我们开始今天的文章&#xff0c;还是老规…

【网络安全】-Linux操作系统基础

文章目录 Linux操作系统目录结构Linux命令格式Linux文件和目录操作命令Linux用户和用户组操作命令Linux查看和操作文件内容命令Linux文件压缩和解压缩命令Linux网络管理命令Linux磁盘管理和系统状态命令Linux安全加固总结 Linux是一个强大的操作系统&#xff0c;广泛用于服务器…