链表算法中常用操作和技巧

1.常用技巧

1.1.画图

 1.2.添加虚拟头节点

 1.3.大胆引入中间变量

1.4.快慢双指针

1.4.1判断链表是否有环

 1.4.2找链表中环的入口

​2.常用操作

2.1. 创建一个新节点

2.2.尾插

2.3.头插 


1.常用技巧

1.1.画图

画图可以让一些抽象的文字语言更加形象生动

画图!!!->直观+形象+便于我们理解

例如:

现在有一个结构体

struct s
{struct s*pprev;struct s*pnext;
}

 他们的的关系如下:

prev->pnext->pnext=cur;
cur->pprev->prev=prev;
cur->pnext=prev;
prev->pprev=cur;

是不是感觉无从下手,但是我们只要转化为图形就能很好的理解: 

 1.2.添加虚拟头节点

 在链表算法题中很多时候都会给我们传来的头节点为空情况,如果我们没有判断直接对空指针进行解引用,程序可能会直接崩溃: 

如果我们能引入一个头节点,则可以避免直接对空指针解引用情况

这个头节点我们也会称作‘哨兵位’: 

 1.3.大胆引入中间变量

 如果不引入中间变量

prev->pnext->pprev=cur;
cur->pnext=prev->pnext;
prev->pnext=cur;
cur->pprev=prev;

 引入中间变量next,代码更加干净整洁

next=prev->pnext;
next->pprev=cur;
cur->pnext=next;
prev->pnext=cur;
cur->pprev=prev;

1.4.快慢双指针

1.4.1判断链表是否有环

  • 快指针(fast)一次走两步,慢指针(slow)一次走两步
  • 对有环的链表来说,慢指针相当于快指针不动,快指针相对慢指针一次一步
  • 对无环的链表来说,快指针会提前走出链表,让循环结束
  • 循环条件(fast==slow)有环,(fast->next==nullptr||fast->next->next==nullptr)无环

 相遇:

 1.4.2找链表中环的入口

  • 假设链表共有a+b个元素,从head(头节点)到圆环入口有a个元素,圆环有b个元素
  • 在有环基础上,两者相遇,快指针和慢指针分别走了f,s。f=2s(因为快指针是慢指针速度的两倍)
  • f=s+nb(fast比slow多走了n个圆环),所以f=2nb,s=nb
    • 固定此时相遇位置,slow从头开始再走一遍,slow到fast的位置就是圆环b的长度
    • 不固定此时相遇位置,slow从头出发,fast从相遇位置出发,两者都每次走一步,两者再次相遇的位置即为圆环入口的位置 

2.常用操作

2.1. 创建一个新节点

例如:创建一个head的指针

s*head=new s();

2.2.尾插

tail->next=cur;
cur=tail;

2.3.头插 

cur->next=head->next;
head->next=cur;

常用于反转链表

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* phead=new ListNode();if(head==nullptr) return nullptr;phead->next=head;ListNode*cur=head->next;head->next=nullptr;while(cur!=nullptr){ListNode*temp=cur->next;cur->next=phead->next;phead->next=cur;cur=temp;}return phead->next;}
};

 

 

 

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

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

相关文章

【9】数据结构的串篇章

目录标题 串的定义顺序串的实现初始化赋值打印串求串的长度复制串判断两个串长度是否相等连接两个串比较两个串内容是否相等插入操作删除操作调试与代码合集 串的模式匹配算法朴素的模式匹配算法KMP算法实现模式匹配 串的定义 定义:由0个或多个字符组成的有限序列&…

GMSL Strapping Pins CFG0/CFG1 应用

GMSL device 使用起来还是比较简单 ADI 已经充分考虑了用户的需求,尽可能的降低的芯片的使用和配置复杂度 一对加串器和解串器,只要工作模式匹配得当,Link Locked,便能够正常工作 如果遇到 Link 无法建立(Locked&…

`uia.WindowControl` 是什么:获取窗口文字是基于系统的 UI 自动化接口,而非 OCR 方式

uia.WindowControl 是什么:获取窗口文字是基于系统的 UI 自动化接口,而非 OCR 方式 uia.WindowControl 通常是基于 Windows 系统的 UI 自动化框架(如 pywinauto 中的 uia 模块)里用于表示窗口控件的类。在 Windows 操作系统中,每个应用程序的窗口都可以看作是一个控件,ui…

Easysearch VS Opensearch 数据写入与存储性能对比

本文记录 Easysearch 和 Opensearch 数据写入和数据存储方面的性能对比。 准备 压测工具:INFINI Loadgen 对比版本: Easysearch 1.11.1(lucene 8.11.4)Opensearch 2.19.1(lucene 9.12.1) 节点 JVM 配置…

力扣题解:142. 环形链表 II

在链表学习中,我们已经了解了单链表和双链表,两者的最后一个结点都会指向NULL;今天我们介绍的循环列表则不同,其末尾结点指向的这是链表中的一个结点。 循环链表是一种特殊类型的链表,其尾节点的指针指向头节点&#…

区间 dp 系列 题解

1.洛谷 P4342 IOI1998 Polygon 我的博客 2.洛谷 P4290 HAOI2008 玩具取名 题意 某人有一套玩具,并想法给玩具命名。首先他选择 W, I, N, G 四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用 W, I, N, G …

天基光学图像仿真原理简介

一、原理简介 天基光学图像仿真通过数学模型和算法模拟空间目标在光学系统中的成像过程,核心原理可归纳为以下四部分: 1. 目标与背景建模‌ 目标运动建模‌:利用轨道动力学模型(如SGP4)解析空间目标轨迹,…

Jetpack Compose 状态保存机制全面解析:让UI状态持久化

在Android开发中,Jetpack Compose 的状态管理是一个核心话题,而状态保存则是确保良好用户体验的关键。本文将深入探讨Compose中各种状态保存技术,帮助你在配置变更和进程重建时保持UI状态。 一、基础保存:rememberSaveable reme…

【Json-Rpc #1】项目背景及环境搭建

📃个人主页:island1314 🔥个人博客:island ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 生活总是不会一帆风顺,前进…

WPF轮播图动画交互 动画缩放展示图片

WPF轮播图动画交互 动画缩放展示图片 效果如下图&#xff1a; XAML代码&#xff1a; <Window x:Class"Caroursel.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/20…

为什么 npm list -g 没显示 node_modules?✨

揭秘&#xff1a;为什么 npm list -g 没显示 node_modules&#xff1f;&#x1f575;️‍♂️✨ 嗨&#xff0c;各位代码探险家&#xff01;&#x1f44b; 今天我们要破解一个 npm 小谜团&#xff1a;运行 npm list -g --depth0 时&#xff0c;为什么输出的路径里看不到 node_…

都江堰与郑国渠

目录标题 一、历史背景&#xff1a;地缘博弈下的水利突围都江堰&#xff1a;化水患为天府的千年大计郑国渠&#xff1a;间谍引发的战略反转 二、工程智慧&#xff1a;超越时代的科技奇迹都江堰&#xff1a;生态治水的典范郑国渠&#xff1a;泥沙资源化的创举 三、后世影响&…

链路聚合+vrrp

1.链路聚合 作用注意事项将多个物理接口&#xff08;线路&#xff09;逻辑上绑定在一起形成一条逻辑链路&#xff0c;起到叠加带宽的作用1.聚合接口必须转发速率一致。2.聚合设备两端必须一致 配置命令 方法一 [Huawei]interface Eth-Trunk 0----先创建聚合接口&#xff0c;…

【STM32单片机】#7 定时器输入捕获

主要参考学习资料&#xff1a; B站江协科技 STM32入门教程-2023版 细致讲解 中文字幕 开发资料下载链接&#xff1a;https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 单片机套装&#xff1a;STM32F103C8T6开发板单片机C6T6核心板 实验板最小系统板套件科协 实验&…

【android bluetooth 框架分析 01】【关键线程 3】【bt_jni_thread 线程介绍】

1. bt_jni_thread 职责介绍 bt_jni_thread 这个线程的作用是专门负责处理蓝牙 JNI 层的消息循环&#xff0c;也可以说是 C 层和 Java 层交互的桥梁线程。 1.1 什么是 JNI 层&#xff1f;为什么需要这个线程&#xff1f; JNI&#xff08;Java Native Interface&#xff09;是 …

基于视觉语言模型的机器人实时探索系统!ClipRover:移动机器人零样本视觉语言探索和目标发现

作者&#xff1a;Yuxuan Zhang 1 ^{1} 1, Adnan Abdullah 2 ^{2} 2, Sanjeev J. Koppal 3 ^{3} 3, and Md Jahidul Islam 4 ^{4} 4单位&#xff1a; 2 , 4 ^{2,4} 2,4佛罗里达大学电气与计算机工程系RoboPI实验室&#xff0c; 1 , 3 ^{1,3} 1,3佛罗里达大学电气与计算机工程系F…

SpringBoot和微服务学习记录Day2

微服务 微服务将单体应用分割成更小的的独立服务&#xff0c;部署在不同的服务器上。服务间的关联通过暴露的api接口来实现 优点&#xff1a;高内聚低耦合&#xff0c;一个模块有问题不影响整个应用&#xff0c;增加可靠性&#xff0c;更新技术方便 缺点&#xff1a;增加运维…

网站集群批量管理-Ansible剧本与变量

复盘内容&#xff1a;链接指北 查看ansible命令文档 ansible-doc -s systemd一、剧本 何为剧本: playbook 文件,用于长久保存并且实现批量管理,维护,部署的文件. 类似于脚本存放命令和变量 剧本yaml格式,yaml格式的文件:空格,冒号. 剧本未来我们批量管理,运维必会的内容. …

如何在Dify中安装运行pandas、numpy库(离线、在线均支持,可提供远程指导)

pandas和numpy这两个库是数据科学和数据分析中经常使用的工具包&#xff0c;原生的Dify无法直接使用这两个库&#xff0c;需要手动安装后才可以使用。本文将介绍如何在Dify中安装pandas和numpy&#xff0c;并在代码执行节点中运行使用pandas和numpy。 Dify的代码执行节点中的py…

Helm核心概念与常见操作介绍

在管理Kubernetes集群里的应用时&#xff0c;Helm能帮上大忙&#xff0c;它把应用的部署、升级和管理变得简单多了&#xff0c;有如是Kubernetes的 “应用商店”。 Helm的三个重要概念 三大概念最直接的理解&#xff1a;Helm 安装 charts 到 Kubernetes 集群中&#xff0c;每…