链表。。.

文章目录

  • 单链表
  • 头结点
  • 合并
    • 01 21. 合并两个有序链表
    • 02 23. 合并 K 个升序链表
  • 拆分
    • 01 86. 分隔链表
  • 快慢指针
    • 链表倒数第k个结点
    • 链表是否成环
    • 链表的中间结点
    • 01 19. 删除链表的倒数第 N 个结点
    • 02 142. 环形链表 II
    • 03 876. 链表的中间结点
  • 相交
    • 01 160. 相交链表
  • 反转
    • 反转链表
    • 反转前 N 个节点
    • 反转任意区间
    • 01 206. 反转链表
    • 02 92. 反转链表 II
    • 03 25. K 个一组翻转链表

单链表

单链表的问题有许多巧妙的思想,只能多多积累。

头结点

头结点可以简化边界处理情况。

  1. 创造链表时,通过头结点创建
  2. 删除节点时,通过头结点删除

合并

01 21. 合并两个有序链表

02 23. 合并 K 个升序链表

拆分

01 86. 分隔链表

快慢指针

链表倒数第k个结点

倒数第k = 正数 n - k

先将 p1 走 k。
那么 p1 到 末尾 = n - k。

ListNode* kFromBottom(ListNode* head, int k) {
 
        ListNode* p1 = head, *p2 = head;

        for(int i = 0; i < k; i++)
            p1 = p1->next;

        while(p1){	//p1会走到空结点
            p1 = p1->next;
            p2 = p2->next;
        }
		return p2;
    }

链表是否成环

如果有环,则快指针 一定会遇到 慢指针

bool isCycle(ListNode* head) {
        
        ListNode* p1 = head, *p2 = head;

        while(p1 && p1->next){

            p1 = p1->next->next;
            p2 = p2->next;

            if(p1 == p2)
                return true;
            
                
        }

        return false;
    }

链表的中间结点

快指针以2倍速走

ListNode* middleNode(ListNode* head) {

        ListNode* p1 = head, *p2 = head;

        while(p1 && p1->next){

            p1 = p1->next->next;

            p2 = p2->next;
        }

        return p2;
    }

01 19. 删除链表的倒数第 N 个结点

02 142. 环形链表 II

03 876. 链表的中间结点

相交

01 160. 相交链表

反转

反转链表

  1. 递归
ListNode* reverseList(ListNode* head) {

        if(!head)
            return nullptr;

        if(!head->next)
            return head;

        ListNode* newHead = reverseList(head->next);

        head->next->next = head;

        //断开head
        head->next = nullptr;

        return newHead;
    }
  1. 迭代
    在这里插入图片描述
ListNode* reverseList(ListNode* head) {
        
        ListNode* last = nullptr;
        ListNode* p = head;
        
        while (p) {
            ListNode* next = p->next;

            p->next = last; //p->next指向 前一个节点
            last = p;
            
            p = next;
        }

        return last;
    }

反转前 N 个节点

ListNode* successor = nullptr; 

ListNode* reverseListN(ListNode* head, int n) {

        if(n == 1){
			successor = head->next;//使用递归,可以方便的记录后继结点
			return head;
		}

        ListNode* newHead = reverseListN(head->next, n - 1);

        head->next->next = head;

        //断开head
        head->next = successor;

        return newHead;
    }

反转任意区间

ListNode* reverseBetween(ListNode* head, int left, int right) {
	
	if(left == 1)
		return reverseListN(head, 1, right);
	
	head->next = reverseListN(head->next, left - 1, right - 1);
	
	return head;
}

在这里插入图片描述

01 206. 反转链表

02 92. 反转链表 II

03 25. K 个一组翻转链表

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每三人拥有一辆车!车载工业平板电脑五大硬性要求

在今年7月初&#xff0c;公安部发布2022年上半年全国机动车和驾驶人统计数据&#xff0c;数据显示&#xff0c;截至2022年6月底&#xff0c;全国机动车保有量达4.06亿辆&#xff0c;其中汽车3.10亿辆。此外&#xff0c;目前全国拥有驾驶证的人数高达4.92亿人&#xff0c;其中汽…

Windows安装ChatGLM3

Git clone GitHub - THUDM/ChatGLM3: ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型 查看cuda版本 CUDA&#xff08;Compute Unified Device Architecture&#xff09;是NVIDIA公司开发的一个平行计算平台和编程模型&#xff0c;它允许开发者利用NVIDI…

antd3.x Tree组件遇到的坑

在使用antd 3.x低版本组件的过程中&#xff0c;使用Tree组件&#xff0c;加载树形数据时候&#xff0c;第一次始终无法加载数据&#xff0c;在查阅antd文档后发现Tree组件会缓存数据&#xff0c;需要进行判断数据是否已加载 {microFolderList.length ?<TreedefaultExpanded…

OpenHarmony图像解码库—stb-image [GN编译]

简介 stb_image主要是C/C实现的图像解码库。 下载安装 直接在OpenHarmony-SIG仓中搜索stb-image并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 库代码存放路径&#xff1a;./third_party/stb-image 修改添加依赖的编译脚本&#xff0c;路径&#xff1a;/devel…

前端三剑客 HTML+CSS+JavaScript ① 基础入门

光永远会照亮你 —— 24.4.18 一、C/S架构和B/S架构 C:Client&#xff08;客户端&#xff09; B:Browser&#xff08;浏览器&#xff09; S:Server&#xff08;服务器&#xff09; C/S 架构&#xff1a; B/S 架构&#xff1a; 大型专业应用、安全性要求较高的应用&#xff0c;还…

Docker使用教程及docker部署Vue项目

什么是Docker及其工作原理 虚拟化技术Docker是什么&#xff1f;三大基本术语核心算法原理和具体操作步骤 Docker和传统虚拟化技术区别为什么使用Docker&#xff1f;Docker有什么作用&#xff1f;1.解决应用部署的环境问题遇到问题达到效果 2.容器化 docker的各种命令解释运行机…

nodejs版本过高导致vue-cli无法启动的解决方案

目录 前言异常现象解决方案总结 前言 之前使用软件管家升级了Nodejs&#xff0c;今天在运行Vue项目的时候老是报错&#xff0c;查了很多资料&#xff0c;最后确定是Nodejs版本过高导致的。 异常现象 E:\project\ry\RuoYi-Cloud\ruoyi-ui>npm run dev> ruoyi3.6.4 dev …

ubuntu上安装调试SVN服务

刚成立团队需要临时搭建一台SVN服务器&#xff0c;所以对照网上的一些提示做了下&#xff0c;操作起来不复杂&#xff0c;还是踩了不少坑&#xff0c;顺便原理性了解了下。 主要操作步骤如下&#xff1a; 1&#xff1a;安装svn sudo apt-get install subversion 2: 创建svn版…

C++入门之类和对象(中)

C入门之类和对象(中) 文章目录 C入门之类和对象(中)1. 类的6个默认对象2. 构造函数2.1 概念2.2 特性2.3 补丁 3. 析构函数3.1 概念3.2 特性3.3 总结 4. 拷贝构造函数4.1 概念4.2 特性4.3 总结 1. 类的6个默认对象 如果一个类中什么都没有&#xff0c;那么这个类就是一个空类。…

NLP任务全览:涵盖各类NLP自然语言处理任务及其面临的挑战

自然语言处理(Natural Language Processing, 简称NLP&#xff09;是计算机科学与语言学中关注于计算机与人类语言间转换的领域。NLP将非结构化文本数据转换为有意义的见解&#xff0c;促进人与机器之间的无缝通信&#xff0c;使计算机能够理解、解释和生成人类语言。人类等主要…

chatgpt免费使用网站

在人工智能的浪潮中&#xff0c;OpenAI的ChatGPT作为一款前沿的语言处理工具&#xff0c;已经引起了广泛的关注和讨论。 ChatGPT以其卓越的语言理解和生成能力&#xff0c;为用户提供了多样化的应用场景&#xff0c;从日常对话、编程辅助到内容创作等。然而&#xff0c;对于许…

FL Studio21.2.4重磅发布更新发布功能介绍2024最新

FL Studio21是一款功能强大的数字音频工作站&#xff08;DAW&#xff09;&#xff0c;它在音乐制作领域占据着重要的地位。以下是对FL Studio 21的详细介绍&#xff1a; 一、功能与特点 音频编辑&#xff1a;FL Studio 21提供了强大的音频编辑功能&#xff0c;包括波形编辑&a…

车载诊断系统应用方案选型,ESP8266方案让成本降低了35%,销售数据提升47%

车载诊断系统简称OBD&#xff0c;这个系统随时监控发动机的运行状况和尾气后处理系统的工作状态&#xff0c;一旦发现有可能引起排放超标的情况&#xff0c;会马上发出警示。当系统出现故障时&#xff0c;故障灯(MIL)或检查发动机(Check Engine)警告灯亮&#xff0c;同时OBD系统…

分支结构(if)

一.关于if 1.什么是if 在我们判断一个条件的时候&#xff0c;需要执行一些条件&#xff0c;这时就需要我们的"if"闪亮登场。 2.怎么使用if if是这样使用的&#xff1a; if(判断条件){判断过后执行的 } 然后我们需要一道例题洛谷的P5712 【深基3.例4】Apples&am…

SVN泄露(ctfhub)

目录 下载安装dvcs-ripper 使用SVN 一、什么是SVN&#xff1f; 使用SVN能做什么&#xff1f; 二、SVN泄露&#xff08;ctfhub&#xff09; SVN源代码漏洞的主要原因&#xff1a; 工具准备&#xff1a;dirsearch、dvcs-ripper 网络安全之渗透测试全套工具篇&#xff08;内…

正式发布的Spring AI,能让Java喝上AI赛道的汤吗

作者:鱼仔 博客首页: https://codeease.top 公众号:Java鱼仔 前言 最近几年AI发展实在太快了&#xff0c;仿佛只要半年没关注&#xff0c;一个新的大模型所产生的效果就能超越你的想象。Java在AI这条路上一直没什么好的发展&#xff0c;不过Spring最近出来了一个新的模块叫做S…

【学习笔记】Vue3源码解析:第五部分 - 实现渲染(2)

课程地址&#xff1a;【已完结】全网最详细Vue3源码解析&#xff01;&#xff08;一行行带你手写Vue3源码&#xff09; 第五部分-&#xff1a;&#xff08;对应课程的第33 - 35节&#xff09; 第33节&#xff1a;《讲解组件渲染流程》 1、在 render 函数中拿到虚拟dom vnode后…

Ubuntu的终端中启用鼠标左键即为选中复制,右键粘贴的功能

在Ubuntu终端中启用鼠标复制和粘贴的功能需要进行一些设置。 首先&#xff0c;打开终端窗口&#xff0c;在菜单栏中找到“Edit”选项&#xff0c;点击“Profile Preferences”。然后&#xff0c;在“General”选项卡中&#xff0c;勾选“Use custom font”选项&#xff0c;可以…

博客文章:AWS re:Invent 2023 新产品深度解析 - 第四部分

TOC &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限可能&#xff0c;共同成长&#xff01; 写在最前面 去年发布文章的一部分&#xff0c;由于内…

微光成束,星火燎原,酷雷曼扶持政策再升级!

从北纬 18 度的三亚海角&#xff0c; 到北纬 53 度的漠河不夜城&#xff0c; 从东经 81 度的塞外江南伊犁&#xff0c; 到东经 120 度的上海魔都。 酷雷曼合作商为客户服务的范围 遍及全国 300 余个地区&#xff0c; 跨越了东南西北的辽阔地域。 即便如此&#xff0c; 面…