java算法学习索引之链表问题

0 相关类

public class Link {class NewNode {public int value;public NewNode next;public NewNode rand;public NewNode(int value, NewNode next, NewNode rand) {this.value = value;this.next = next;this.rand = rand;}public NewNode(int value) {this.value = value;}}class  Node {public int value;public Node next;public Node(int value) {this.value = value;}}class DoubleNode{public int value;public DoubleNode pre;public DoubleNode next;public DoubleNode(int value) {this.value = value;}}public Node head;public DoubleNode dhead;public void add(int vlaue) {Node node = new Node(vlaue);if (head == null) {head = node;} else {node.next = head;head = node;}}public void addDoubleNode(int vlaue) {DoubleNode node = new DoubleNode(vlaue);if (dhead == null) {dhead = node;} else {node.next = dhead;dhead.pre =node;dhead = node;}}// TODO Auto-generated method stubpublic static void printLink(Node head) {System.out.println();while (head != null) {System.out.print(head.value + " ");head = head.next;}}public static void printDLink(DoubleNode head2) {// TODO Auto-generated method stubSystem.out.println();while (head2 != null) {System.out.print(head2.value + " ");head2 = head2.next;}}

一  打印两个有序链表的公共部分

给定两个有序链表的头指针head1和head2,打印两个链表的公共部分

要打印两个有序链表的公共部分,可以使用双指针的方法进行比较。

具体实现如下:

public void printCommonPart(Node head1, Node head2) {System.out.println("Common Part:");while (head1 != null && head2 != null) {if (head1.value < head2.value) {head1 = head1.next;} else if (head1.value > head2.value) {head2 = head2.next;} else {System.out.println(head1.value + " "); // 打印公共节点head1 = head1.next;head2 = head2.next;}}System.out.println();
}

这个方法首先打印出"Common Part:"作为提示信息。

然后使用两个指针 `head1` 和 `head2` 分别指向两个链表的头节点。

在循环中,比较 `head1.value` 和 `head2.value` 的大小关系:
- 如果 `head1.value` 小于 `head2.value`,则移动 `head1` 指针到下一个节点,因为在有序链表中,较小的值一定不会和另一个链表中的值匹配。
- 如果 `head1.value` 大于 `head2.value`,则移动 `head2` 指针到下一个节点,同样因为有序链表中较小的值不会与另一个链表中的值匹配。
- 如果 `head1.value` 等于 `head2.value`,则打印这个公共节点的值,并将两个指针同时移动到各自的下一个节点。

最后,打印一个空行表示结束。

二  在单链表和双链表中删除倒数第K个节点

【题目】分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点。

【要求】如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。

public void printLink(Node head) {System.out.println();while (head != null) {System.out.print(head.value + " ");head = head.next;}
}public void printDLink(DoubleNode head) {System.out.println();while (head != null) {System.out.print(head.value + " ");head = head.next;}
}public static void main(String[] args) {Chapter2_2 chapter = new Chapter2_2();Link link1 = new Link(); // 单链表Link link2 = new Link(); // 双链表// 构造链表for (int i = 10; i > 0; i--) {link1.add(i);link2.addDoubleNode(i);}chapter.printLink(link1.head); // 打印单链表Node head = chapter.removeKNode(link1.head, 6); // 删除倒数第6个节点chapter.printLink(head); // 打印删除后的单链表chapter.printDLink(link2.dhead); // 打印双链表DoubleNode dhead = chapter.removeKDoubleNode(link2.dhead, 6); // 删除倒数第6个节点chapter.printDLink(dhead); // 打印删除后的双链表
}// 删除双链表中倒数第K个节点
private DoubleNode removeKDoubleNode(DoubleNode head, int k) {if (head == null || k < 1) {return null;}DoubleNode cur = head;while (cur != null) {k--;cur = cur.next;}// 此时k==0,说明原始K等于链表长度;if (k == 0) {head = head.next;head.pre = null; // 将新的头节点的pre设置为nullreturn head;}if (k < 0) {cur = head;while (++k != 0) {cur = cur.next;}DoubleNode newNode = cur.next.next;cur.next = newNode;if (newNode != null) {newNode.pre = cur;}}return head;
}// 删除单链表中倒数第K个节点
private Node removeKNode(Node head, int k) {if (head == null || k < 1) {return null;}Node cur = head;while (cur != null) {k--;cur = cur.next;}if (k == 0) {head = head.next;}if (k < 0) {cur = head;while (++k != 0) {cur = cur.next;}cur.next = cur.next.next;}return head;
}

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

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

相关文章

【云原生-Kurbernetes篇】HPA 与 Rancher管理工具

文章目录 一、Pod的自动伸缩1.1 HPA1.1.1 简介1.1.2 HPA的实现原理1.1.3 相关命令 1.2 VPA1.2.1 简介1.2.2 VPA的组件1.2.3 VPA工作原理 1.3 metrics-server简介 二、 HPA的部署与测试2.1 部署metrics-serverStep1 编写metrics-server的配置清单文件Step2 部署Step3 测试kubect…

Flink Operator 使用指南 之 Flink Operator安装

介绍 Flink Kubernetes Operator 充当控制平面来管理 Apache Flink 应用程序的完整部署生命周期。尽管 Flink 的Native Kubernetes 集成已经允许用户在运行的 Kubernetes(k8s) 集群上直接部署 Flink 应用程序,但自定义资源和Operator Pattern 也已成为 Kubernetes 原生部署体…

Mrakdown Nice:格式

标题 缩进 删除线 斜体 加粗

动手学深度学习(三)---Softmax回归

文章目录 一、理论知识 softmax回归 一、理论知识 回归估计一个连续值分类预测一个离散类别 回归单连续数值输出自然区间R跟真实值的区别作为损失 分类通常多个输出输出i是预测为第i类的置信度 一般我们使用交叉熵用来衡量两个概率的区别 将它作为损失 其梯度是真实概率和…

STM32笔记

GPIO GPIOB->BSRR | GPIO_PIN_7 在STM32F103中&#xff0c;GPIOB->BSRR | GPIO_PIN_7 的作用是将GPIOB的第7位引脚设置为高电平&#xff08;将引脚置1&#xff09;&#xff0c;而GPIOB->BRR | GPIO_PIN_7 的作用是将GPIOB的第7位引脚设置为低电平&#xff08;将引脚置…

米贸搜|Tiktok如何认证蓝V

如何开通TikTok认证蓝V&#xff1f;第一步&#xff1a;准备材料 在申请TikTok蓝V之前&#xff0c;需要准备好以下材料&#xff1a; 1.个人身份证明&#xff08;身份证、护照等&#xff09;&#xff1b; 2.公司营业执照等相关证明文件&#xff08;如有&#xff09;&#xff1b; …

同一台电脑访问gitee多个仓库代码

在开发上我们经常遇到&#xff0c;需要跟别人共享代码&#xff0c;特别是跟有些客户联合开发的情况下&#xff0c;有很多个客户。有些git仓库是客户建立的&#xff0c;比如有两个客户A和分布建了gitA和gitB两个代码仓库。我们在支持这两个客户的时候可能是同一个工程师&#xf…

【机器学习】033_反向传播

一、计算图、反向传播原理 1. 回顾前向传播 例&#xff1a;假设现在有一个神经网络&#xff0c;其仅有一个输出层和一个神经单元 定义 定义 &#xff0c;即激活函数对激活值不再做具体处理 定义平方损失函数 &#xff0c;计算a的值与真实值的差距 此时&#xff0c;通过计算…

Python基础学习__测试报告

# 使用pycharm生成报告:只有在单独执行一个TestCase文件时可以生成,使用TestSuite等就不能用了 # 使用第三方的测试报告:例如:HTMLTestRunner第三方类库 #使用HTMLTestRunner这个执行对象# 1.获取第三方的测试运行类Runner模块(一个py文件),将其放在代码目录下 # 2.导包:unitte…

爬虫的http和https基础

HTTP响应状态码响应状态码 下面来看下详细的状态码数值和说明&#xff1a; 200系列&#xff1a; 200 OK&#xff1a;这个是最常见的&#xff0c;也是爬虫工程师最喜欢的&#xff0c;代表你本次的请求顺利拿到了响应&#xff0c;没有任何问题 201 Created&#xff1a;201代表…

psql 模式(SCHEMA)

模式是数据库领域的一个基本概念&#xff0c;有些数据库把模式和用户合二为一了&#xff0c;而postgresql则是有清晰的模式定义。 模式是数据库中的一个概念&#xff0c;可以理解为一个命名空间或目录&#xff0c;不同模式下可以有相同名称的表、函数等对象而不会产生冲突。提出…

2023年亚太杯数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 最短时…

LeetCode算法题解(动态规划)|LeetCoed62. 不同路径、LeetCode63. 不同路径 II

一、LeetCoed62. 不同路径 题目链接&#xff1a;62. 不同路径 题目描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下…

渗透测试面试中常见的问题收集(部分)

1、xss盲打到内网服务器的利用 钓鱼管理员 信息收集 2、什么是虚拟机逃逸&#xff1f; 利用虚拟机软件或者虚拟机中运行的软件的漏洞进行攻击&#xff0c;以达到攻击或控制虚拟机宿主操作系统的目的 3、了解过websocket吗&#xff1f; WebSocket是一种在单个TCP连接上进行…

通明智云宣布完成数千万元A+轮融资, 引领云原生与信创两翼齐飞的应用交付解决方案

近日&#xff0c;通明智云&#xff08;北京&#xff09;科技有限公司&#xff08;简称&#xff1a;通明智云&#xff09;宣布完成数千万元A轮融资&#xff0c;由全聚合与信公投资联合投资&#xff0c;明论资本担任本轮融资独家财务顾问。本轮融资资金将主要用于NJet云原生应用引…

智能时代的智能工具(gpt)国产化助手

目前gpt对代码以及其他领域都是可以支持&#xff0c;在国内有很多&#xff0c;常用的百度的 文心一言 &#xff0c;阿里的 通义千问 &#xff0c;还有&#xff08;“豆包”&#xff0c;“”讯飞星火“”&#xff09;等&#xff0c;除了写代码可以外&#xff0c;也可以很好的支持…

【蓝桥杯省赛真题44】Scratch像素画板 蓝桥杯少儿编程scratch图形化编程 蓝桥杯省赛真题讲解

scratch像素画板 第十四届青少年蓝桥杯scratch编程省赛真题 一、题目要求 编程实现 1.点击绿旗,角色、背景如图所示(三种颜色调色盘、清除图标及方格角色请自行创建,点击绿旗后立刻呈现下图效果); 2.用鼠标点击红色调色盘,红色调色盘变为选中状态(如下图所示),此时鼠…

docker和docker-compose生产的容器,不在同一个网段,解决方式

在实际项目中&#xff0c;使用docker run xxXx 和docker-compose up -d 不在同一个网段&#xff0c;一个是默认是172.17.x.x, 另一个是172.19.x.x。为解决这个问题需要自定义一个网络&#xff0c;我命名为“my-bridge” 首先熟悉几条命令&#xff1a; docker network ls 或…

vue动态获取目录结构进行配置静态路由

文章目录 前言定义项目页面格式一、vite 配置动态路由新建 /router/utils.ts引入 /router/utils.ts 二、webpack 配置动态路由总结如有启发&#xff0c;可点赞收藏哟~ 前言 项目中动态配置路由可以减少路由配置时间&#xff0c;并可减少配置路由出现的一些奇奇怪怪的问题 路由…

多维时序 | MATLAB实现PSO-GRU-Attention粒子群优化门控循环单元融合注意力机制的多变量时间序列预测

多维时序 | MATLAB实现PSO-GRU-Attention粒子群优化门控循环单元融合注意力机制的多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-GRU-Attention粒子群优化门控循环单元融合注意力机制的多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MAT…