算法专题八: 链表

1.两数相加

题目链接:2. 两数相加 - 力扣(LeetCode)

/*** 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 addTwoNumbers(ListNode l1, ListNode l2) {ListNode cur1=l1,cur2=l2;ListNode newHead = new ListNode(0);ListNode prev=newHead;int t=0;while(cur1!=null || cur2!=null || t!=0){if(cur1!=null){t+=cur1.val;cur1=cur1.next;}if(cur2!=null){t+=cur2.val;cur2=cur2.next;}prev.next=new ListNode(t % 10);prev=prev.next;t/=10;//如果有进位,使t为1,加入下次的计算}return newHead.next;}
}

2.两两交换链表中的节点

题目链接:24. 两两交换链表中的节点 - 力扣(LeetCode)

/*** 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 swapPairs(ListNode head) {if(head==null || head.next==null){return head;}ListNode newHead=new ListNode(0);newHead.next=head;ListNode prev=newHead;ListNode cur=prev.next;ListNode next=cur.next;ListNode nnext=next.next;while(cur!=null && next!=null){next.next=cur;cur.next=nnext;prev.next=next;prev=cur;cur=nnext;if(cur!=null){next=cur.next;}if(next!=null){nnext=next.next;}}return newHead.next;}
}

3.重排列表

题目链接:143. 重排链表 - 力扣(LeetCode) 

头插法初始化 

/*** 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 void reorderList(ListNode head) {if(head==null || head.next==null || head.next.next==null){return ;}// 找到中间的节点ListNode fast=head;ListNode slow=head;while(fast!=null && fast.next!=null){slow=slow.next;fast=fast.next.next;}ListNode head2=new ListNode();ListNode cur=slow.next;slow.next=null;while(cur!=null){ListNode next=cur.next;    cur.next=head2.next;head2.next=cur;cur=next;  }// 合并两个列表ListNode cur1=head;ListNode cur2=head2.next;ListNode ret=new ListNode();ListNode prev=ret;while(cur1!=null){// 合并前一部分prev.next=cur1;prev=cur1;cur1=cur1.next;// 合并后一部分if(cur2!=null){prev.next=cur2;prev=cur2;cur2=cur2.next;}}}
}

4.合并k个升序列表

题目链接:23. 合并 K 个升序链表 - 力扣(LeetCode)

方法一:使用优先级队列来做

/*** 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 mergeKLists(ListNode[] lists) {// 创建一个小顶堆,元素从小到大进行排列PriorityQueue<ListNode> heap=new PriorityQueue<>((v1,v2) -> v1.val - v2.val);for(ListNode l:lists){if(l!=null){heap.offer(l);}}ListNode ret=new ListNode(0);ListNode result=ret;while(!heap.isEmpty()){ListNode t=heap.poll();result.next=t;result=t;if(t.next!=null){heap.offer(t.next);}}return ret.next;}
}

 方法二:采用分治,递归的方法

/*** 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 mergeKLists(ListNode[] lists) {return mergeSort(lists,0,lists.length-1);}public ListNode mergeSort(ListNode[] lists,int left,int right){if(left>right){return null;}if(left==right){return lists[left];}int mid=(left+right)/2;ListNode l1=mergeSort(lists,left,mid);ListNode l2=mergeSort(lists,mid+1,right);// 把两个列表进行排序return mergeTwoList(l1,l2);}public ListNode mergeTwoList(ListNode l1,ListNode l2){if(l1==null){return l2;}if(l2==null){return l1;}ListNode newHead=new ListNode(0);ListNode cur1=l1, cur2=l2, result=newHead;while(cur1!=null && cur2!=null){if(cur1.val>cur2.val){result.next=cur2;result=cur2;cur2=cur2.next;}else{result.next=cur1;result=cur1;cur1=cur1.next;}}if(cur1!=null){result.next=cur1;}if(cur2!=null){result.next=cur2;}return newHead.next;}
}

5.K个一组列表翻转

题目链接:25. K 个一组翻转链表 - 力扣(LeetCode)

/*** 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 reverseKGroup(ListNode head, int k) {ListNode cur=head;int n=0;while(cur!=null){cur=cur.next;n++;}n/=k;ListNode newHead=new ListNode(0);ListNode prev=newHead;cur=head;for(int i=0;i<n;i++){ListNode tmp=cur;for(int j=0;j<k;j++){ListNode ret=cur.next;cur.next=prev.next;prev.next=cur;cur=ret;}prev=tmp;}prev.next=cur;return newHead.next;}
}

 

希望对大家有所帮助!!!!

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

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

相关文章

5G+边缘计算推动下的商品详情API低延迟高效率新方案

在电商行业&#xff0c;商品详情API的性能直接关系到用户体验与平台竞争力。传统云计算模式在处理高并发请求时&#xff0c;常面临网络延迟高、带宽成本大等问题。而5G与边缘计算的结合&#xff0c;为商品详情API的低延迟高效率提供了新方案。本文将深入探讨这一新方案&#xf…

【Python教程】CentOS系统下Miniconda3安装与Python项目后台运行全攻略

一、引言 为了在CentOS系统上高效地开发和运行Python项目&#xff0c;我们常常需要借助Miniconda3来管理Python环境。本文将详细介绍如何在CentOS系统上安装Miniconda3&#xff0c;并将Python项目部署到后台运行。 二、Miniconda3和CentOS系统介绍 Miniconda3介绍 Minicond…

【读点论文】A Survey on Open-Set Image Recognition

A Survey on Open-Set Image Recognition Abstract 开集图像识别(Open-set image recognition&#xff0c;OSR)旨在对测试集中已知类别的样本进行分类&#xff0c;并识别未知类别的样本&#xff0c;在许多实际应用中支持鲁棒的分类器&#xff0c;如自动驾驶、医疗诊断、安全监…

使用DuckDB查询DeepSeek历史对话

DeepSeek网页版在左下角个人信息/系统设置的账号管理页签中有个“导出所有历史对话”功能&#xff0c;点击“导出”&#xff0c;片刻就能生成一个deepseek_data-2025-06-14.zip的文件&#xff0c;里面有2个json文件&#xff0c;直接用文本编辑器查看不太方便。 而用DuckDB查询却…

多线程下 到底是事务内部开启锁 还是先加锁再开启事务?

前言 不知大家是否有观察到一个最常见的错误&#xff1a; 先开启事务&#xff0c;然后针对资源加锁&#xff0c;操作资源&#xff0c;然后释放锁&#xff0c;最后提交事务 你是否发现了在这样的场景下会出现并发安全的问题&#xff1f; &#xff08;提示&#xff1a;一个线程A…

Javascript解耦,以及Javascript学习网站推荐

一、学习网站推荐 解构 - JavaScript | MDN 界面如下&#xff0c;既有知识点&#xff0c;也有在线编译器执行代码。初学者可以看看 二、Javascript什么是解构 解构语法是一种 Javascript 语法。可以将数组中的值或对象的属性取出&#xff0c;赋值给其他变量。它可以在接收数…

Java大模型开发入门 (11/15):让AI自主行动 - 初探LangChain4j中的智能体(Agents)

前言 在过去的十篇文章里&#xff0c;我们已经打造出了一个相当强大的AI应用。它有记忆&#xff0c;能进行多轮对话&#xff1b;它有知识&#xff0c;能通过RAG回答关于我们私有文档的问题。它就像一个博学的“学者”&#xff0c;你可以向它请教任何在其知识范围内的问题。 但…

Qt KDReports详解与使用

Qt KDReports详解与使用 一、KD Reports 简介二、安装与配置三、核心功能与使用1、创建基础报表2、添加表格数据3、导出为 PDF4、XML报表定义 四、高级功能1、动态数据绑定2、自定义图表3、模板化设计4、页眉页脚设置 五、常见问题六、总结七、实际应用示例&#xff1a;发票生成…

Spring Cloud 原生中间件

&#x1f4dd; 代码记录 Consul&#xff08;服务注册与发现 分布式配置管理&#xff09; 拥有服务治理功能&#xff0c;实现微服务之间的动态注册与发现 ❌不在使用Eureka&#xff1a;1. 停更进维 2. 注册中心独立且和微服务功能解耦 Consul官网 Spring官方介绍 三个注册中…

CMake实践: 以开源库QSimpleUpdater为例,详细讲解编译、查找依赖等全过程

目录 1.环境和工具 2.CMake编译 3.查找依赖文件 3.1.windeployqt 3.2.dumpbin 4.总结 相关链接 QSimpleUpdater&#xff1a;解锁 Qt 应用自动更新的全新姿势-CSDN博客 1.环境和工具 windows 11, x64 Qt5.12.12或Qt5.15.2 CMake 4.0.2 干净的windows 7&#xff0c;最好是…

WordToCard制作高考志愿填报攻略小卡片【豆包版】

一、什么是WordToCard WordToCard是一个免费的工具&#xff0c;能够将Word文档自动转换为美观的知识卡片或图文海报。以下是它的主要特点&#xff1a; 功能优势 格式支持&#xff1a;支持标题、列表、表格、LaTeX公式等多种格式。模板丰富&#xff1a;提供多种风格的模板&am…

什么是PostCSS

PostCSS是一个用 JavaScript 工具和插件转换 CSS 代码的工具 PostCSS是基于 JavaScript 的 CSS 转换引擎&#xff0c;通过插件系统对 CSS 进行现代化处理&#xff0c;PostCSS 不是预处理器&#xff0c;而是 CSS 的编译器工具链&#xff0c;如同 Babel 之于 JavaScript&#xf…

游戏引擎学习第315天:取消排序键的反向顺序

仓库:https://gitee.com/mrxiao_com/2d_game_8 必须保证代码能跟上不然调试很麻烦 回顾并为今天定调 目前正处于对引擎中 Z 轴处理方式进行修改的阶段。上次我们暂停在一个节点&#xff0c;当时我们希望不再让所有屏幕上的精灵都必须通过同一个排序路径进行排序。我们想要将…

MySQL EXPLAIN 详解

MySQL EXPLAIN 详解:掌握 SQL 性能优化的关键工具 在日常数据库开发和优化过程中,很多开发者会遇到 SQL 查询变慢、索引未命中等问题。MySQL 提供了一个非常实用的工具 —— EXPLAIN 关键字,它可以帮助我们分析 SQL 查询的执行计划,识别潜在的性能瓶颈,从而有针对性地进行…

k8s使用私有harbor镜像源

前言 在node上手动执行命令可以正常从harbor拉取镜像&#xff0c;但是用k8s不行&#xff0c;使用kubectl describe pods xxx 提示未授权 unauthorized to access repository。 处理方法 创建一个secrete资源对象。以下示例中 registry-harbor 为secret资源对象的名称。除了邮…

AI绘画能发展到企业大规模使用的地步么?

1 技术演进与当前成熟度 AI绘画技术经历了从实验室概念到商业级工具的蜕变过程。早期技术受限于模型坍缩等问题&#xff0c;难以满足商业需求。关键突破出现在新型生成模型的应用&#xff0c;大幅提升生成速度至30秒内&#xff0c;在画面逻辑性和风格多样性方面实现质的飞跃。…

使用MyBatis-Plus实现数据权限功能

什么是数据权限 数据权限是指系统根据用户的角色、职位或其他属性&#xff0c;控制用户能够访问的数据范围。与传统的功能权限&#xff08;菜单、按钮权限&#xff09;不同&#xff0c;数据权限关注的是数据行级别的访问控制。 常见的数据权限控制方式包括&#xff1a; 部门数…

大模型——Dify 与 Browser-use 结合使用

大模型——Dify 与 Browser-use 结合使用 Dify 与 Browser-use 的结合使用,能够通过 AI 决策与自动化交互的协同,构建智能化、场景化的业务流程。 以下是两者的整合思路与技术落地方案: 一、核心组合逻辑 分工定位 Dify:作为AI模型调度中枢,负责自然语言理解、决策生成、…

transformer demo

import torch import torch.nn as nn import torch.nn.functional as F import math import numpy as np import pytestclass PositionalEncoding(nn.Module):def __init__(self, d_model, max_seq_length5000):super(PositionalEncoding, self).__init__()# 创建位置编码矩阵p…

centos 8.3(阿里云服务器)mariadb由系统自带版本(10.3)升级到10.6

1. 备份数据库 在进行任何升级操作前&#xff0c;务必备份所有数据库&#xff1a; mysqldump -u root -p --all-databases > all_databases_backup.sql # 或者为每个重要数据库单独备份 mysqldump -u root -p db_name1 > db_name1_backup.sql mysqldump -u root -p db…