双指针技巧,链表
双指针链表
虚拟头节点+双指针,都要用虚拟1头节点
合并两个有序链表
设置双指针,都指向虚拟头节点
ListNode list1 代表的是头节点
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode dummy=new ListNode(-1);ListNode p=dummy;ListNode p1=list1;ListNode p2=list2;while(p1!=null&&p2!=null){if(p1.val<p2.val){p.next=p1;p1=p1.next;}else{p.next=p2;p2=p2.next;}p=p.next;}if(p1!=null){p.next=p1;}if(p2!=null){p.next=p2;}return dummy.next;}
}
单链表的分解(两个小链表可能会成环,要处理
具体来说,我们可以把原链表分成两个小链表,一个链表中的元素大小都小于 x,另一个链表中的元素都大于等于 x,最后再把这两条链表接到一起,就得到了题目想要的结果。
/*** 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 partition(ListNode head, int x) {ListNode dummy1=new ListNode(-1);//记录小于xListNode dummy2=new ListNode(-1);ListNode p=head,p1=dummy1,p2=dummy2;while(p!=null){if(p.val<x){p1.next=p;p1=p1.next;}else{p2.next=p;p2=p2.next;}ListNode temp=p.next;//断开p的next,否则会成环p.next=null;p=temp;}p1.next=dummy2.next;return dummy1.next;}
}
合并k个升序链表(用优先队列实现最小堆
每次弹出最小的结点值,给新链表。
弹出一个,要再存入一个
class Solution {public ListNode mergeKLists(ListNode[] lists) {ListNode dummy=new ListNode(-1);ListNode p=dummy;PriorityQueue<ListNode> pq=new PriorityQueue<>((a,b)->(a.val-b.val));//创建最小堆for(ListNode head:lists){if(head!=null) pq.add(head);}while(!pq.isEmpty()){ListNode node=pq.poll();//弹出一个最小的if(node.next!=null){pq.add(node.next);//存入下一个结点}p.next=node;p=p.next;}return dummy.next;}
}
删除链表倒数第n个结点
定义两个指针,一个在左一个在右边,距离为n,右指针走n次即可。走到最后一个结点则停止,因为删除结点要知道要删除结点的前一个结点。
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy=new ListNode(-1,head);ListNode left=dummy;ListNode right=dummy;while(n-->0){right=right.next;}while(right.next!=null){left=left.next;right=right.next;}left.next=left.next.next;return dummy.next;}
}
链表的中间结点
定义快慢指针,走两步和走一步。返回slow.next
class Solution {public ListNode middleNode(ListNode head) {ListNode dummy=new ListNode(-1,head);ListNode slow=dummy,fast=dummy;while(fast.next!=null&&fast.next.next!=null){slow=slow.next;fast=fast.next.next;}return slow.next;}
}
环形链表
快慢指针判断链表是否为环形,在相遇点时,slow重置到head。快慢指针同时开始走1步直到相遇则是环。

public class Solution {public ListNode detectCycle(ListNode head) {if(head==null||head.next==null) return null;//这里条件是或ListNode slow=head;ListNode fast=head;ListNode p=head;while(fast!=null&&fast.next!=null){slow=slow.next;fast=fast.next.next;if(slow==fast) break;}if(slow!=fast){return null;}slow=head;while(slow!=fast){slow=slow.next;fast=fast.next;}return slow;}
}
相交链表

遍历完A遍历B,遍历完B遍历A,之后会相交
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode p1=headA;ListNode p2=headB;while(p1!=p2){p1=p1.next;p2=p2.next;if(p1==null&&p2==null) return null;if(p1==null) p1=headB;if(p2==null) p2=headA;}return p1;}
}
相关文章:
双指针技巧,链表
双指针链表 虚拟头节点双指针,都要用虚拟1头节点 合并两个有序链表 设置双指针,都指向虚拟头节点 ListNode list1 代表的是头节点 class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode dummynew ListNode(-1…...
鸿蒙 DevEcoStudio:发布进度条通知
使用notificationManager及wantAgent实现功能import notificationManager from ohos.notificationManager import wantAgent from ohos.app.ability.wantAgent Entry Component struct Index {State message: string 发布进度条通知progressValue: number0async publicDownloa…...
web前端之vue动态访问静态资源、静态资源的动态访问、打包、public、import、URL、Vite
MENU 静态资源与打包规则动态访问静态资源直接导入将静态资存放在public目录中动态导入URL构造函数结束语实践与坑附文 静态资源与打包规则 介绍 Vite脚手架在打包代码的时候,会把源代码里对于静态资源的访问路径转换为打包后静态资源文件的路径。主要的区别是文件指…...
Raven2掠夺者2渡鸦2角色创建、游戏预下载、账号怎么注册教程
《渡鸦2》(Raven 2)是由韩国开发的一款大型多人在线角色扮演游戏(MMORPG)类型的手游,作为前作《Raven》的续集,继承并发展了其黑暗奇幻世界观,同时在游戏设计和内容上进行了大量创新。游戏预计于…...
Window VScode配置Conda教程(成功版)
VScode配置Conda 参考博文:https://blog.csdn.net/qq_51831335/article/details/126757014Anaconda安装(注意勾选自动配置环境变量!) 官网:https://www.anaconda.com/download/success VScode配置 python插件安装安装 …...
探索旅行的优惠之选,千益畅行旅游卡让旅程更省心省力!
在旅行的道路上,一张旅游卡往往能为您带来意想不到的便利与优惠。那么,对于千益畅行旅游卡,您是否好奇如何轻松拥有它呢? 首先,千益畅行旅游卡作为旅行者的贴心伴侣,为您提供了多样化的获取渠道。您可以通…...
JVM学习-彻底搞懂Java自增++
从字节码角度分析i和i的区别 public void method6() {int i 10;i; //在局部变量表上直接加1}public void method7() {int i 10;i; //字节码同i}public void method8() {int i 10;int a i; //通过下图可以看出先将局部变量表中的值push到操作数栈,然…...
【全开源】民宿酒店预订管理系统(ThinkPHP+uniapp+uView)
民宿酒店预订管理系统 特色功能: 客户管理:该功能可以帮助民宿管理者更加有效地管理客户信息,包括客户的姓名、电话、地址、身份证号码等,并可以在客户的订单中了解客户的消费情况,从而更好地满足客户的需求ÿ…...
9.3 Go语言入门(变量声明和函数调用)
Go语言入门(变量声明和函数调用) 目录二、变量声明和函数调用1. 变量声明1.1 使用 var 关键字声明1.2 简短声明1.3 零值1.4 常量 2. 函数调用2.1 函数定义2.2 多个返回值2.3 命名返回值2.4 可变参数2.5 匿名函数和闭包 目录 Go 语言(Golang&a…...
CVE-2020-7982 OpenWrt 远程命令执行漏洞学习(更新中)
OpenWrt是一款应用于嵌入式设备如路由器等的Linux操作系统。类似于kali等linux系统中的apt-get等,该系统中下载应用使用的是opgk工具,其通过非加密的HTTP连接来下载应用。但是其下载的应用使用了SHA256sum哈希值来进行检验,所以将下载到的数据…...
代码随想录——左叶子之和(Leetcode404)
题目链接 BFS 队列 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right)…...
解禁谷歌等浏览器禁止网站使用麦克等媒体设备
1、浏览器地址栏输入chrome://flags/ 微软的chromium内核的edge浏览器,既可以输入:chrome://flags/ ,也可以输入edge://flags/ 2、打开后,界面如下 3、输入搜索,unsafe,并启用、输入需要启用的网址...
如何彻底卸载sql sever2022
目录 背景过程1、关闭sql sever服务2、打开控制面板,卸载SQL Sever3、手动删除 SQL Server 遗留文件4、清空注册表5、重启计算机以确保所有更改生效。 总结 背景 重装了电脑,安装sqlServer,一直报错,不成功,所以每次安…...
「51媒体」如何与媒体建立良好关系?
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 与媒体建立良好关系对于企业或个人来说都是一项重要的公关活动。 了解媒体:研究媒体和记者的兴趣,提供相关且有价值的信息。 建立联系:通过专业的方式…...
Selenium 库的爬虫实现
Selenium 是什么? Selenium 是一个用于自动化 Web 应用程序测试的工具。它提供了一个用于测试网站的框架,可以模拟用户在浏览器中的操作,如点击链接、填写表单、提交数据等。Selenium 可以在多种浏览器和操作系统上运行,并且支持…...
【文末附gpt升级方案】数据虚拟化技术的优势
数据虚拟化技术的优势主要体现在以下几个方面: 提高资源利用率和降低成本: 数据虚拟化可以显著减少物理硬件的需求,从而降低硬件成本。通过虚拟化,企业可以利用数据中心提供的规模经济优势,使用更少的服务器来完成相同…...
C++ 常量和变量
1 常量 具体把数据写出来 2,3,4;1.2 1.3;“Hello world!”,“C” cout<<2015 常量:不能改变的量。 字面常量(字面量、直接常量):直接写出的数据。 符号常量:用符号表示数据,但它一旦确定…...
【cocos creator 】生成六边形地图
想要生成一个六边形组成的地图 完整代码示例 以下是完整的代码示例,包含了注释来解释每一步: cc.Class({extends: cc.Component,properties: {hexPrefab: {default: null,type: cc.Prefab},mapWidth: 10, // 网格的宽度(六边形的数量&am…...
TypeScript类型体操练习
历史小剧场 这个世界上,有两种人最痛苦,第一种是身居高位者,第二种是身居底层者,第一种人很少,第二种人很多。第一种人叫崇祯,第二种人叫百姓。 而最幸福的,就是中间那拨人,主要工作…...
leetcode231-Power of Two
题目 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2x ,则认为 n 是 2 的幂次方。 示例 1: 输入:n 1 输出࿱…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...
HTTPS证书一年多少钱?
HTTPS证书作为保障网站数据传输安全的重要工具,成为众多网站运营者的必备选择。然而,面对市场上种类繁多的HTTPS证书,其一年费用究竟是多少,又受哪些因素影响呢? 首先,HTTPS证书通常在PinTrust这样的专业平…...
