翻转链表专题

news2024/11/15 12:30:39

这个专题总共有四道题目

206 翻转链表

92  翻转链表某个区间(翻转链表||)

24  两个一组翻转链表

25  k个一组翻转链表

力扣206 翻转链表

其实就是头插法创建一个新链表

总共三个指针,dummy和head这两个指针是肯定是不用说的,无非是多了一个指向head指针下一个结点的temp指针

核心就是下面这两行代码:

head.next=dummy.next;

dummy.next=head;

class Solution
 {
    public ListNode reverseList(ListNode head) 
    {
        if(head==null)  return null;
        ListNode dummy=new ListNode(-1);
        while(head!=null)
        { 
            //temp用来标记这一轮要插入结点的下一个结点(也就是下一轮要插入的结点,要不然下一轮找不到位置)
            ListNode temp=head.next;
           
            //这两行就是头插法插入结点到dummy结点的后面
            head.next=dummy.next;
            dummy.next=head;
 
            head=temp;
        }
        return dummy.next;
    }
}

 

 

92.力扣  翻转链表某个区间(翻转链表||)

 反转链表的某个区间

 核心代码:

temp.next=q.next;

q.next=temp

class Solution 
{
    public ListNode reverseBetween(ListNode head, int m, int n) 
    {
        ListNode dummy = new ListNode(0);
        dummy.next = head;
 
        // 初始化指针,一前一后,p在前,q在后,先p后q
        ListNode q = dummy;
        ListNode p = dummy.next;
 
        // p移到第一个要反转的结点位置,q移动到第一个要反转的结点的前一个结点
        for(int i= 0; i < m - 1; i++) 
        {
            p = p.next;
            q = q.next;   
        }
 
        // 头插法插入节点
        for (int i = 0; i < n - m; i++) 
        {
            //存下来p指针后面的结点,将它用头插法插入到q指针后面去
            ListNode temp = p.next;
            
            //从链表中删除刚刚的temp结点
            p.next = p.next.next;
            
            //下面两行代码就是头插法,插入temp结点到g指针指向结点的
            temp.next = q.next;
            q.next = temp;
        }
 
        return dummy.next;
    }

力扣24  两个一组翻转链表

 

 

class Solution 
{
    public ListNode swapPairs(ListNode head) 
    {
        ListNode dummy=new ListNode(0);
        dummy.next=head;
 
        ListNode current=dummy;
         
         //交换的是current的后面两个节点
        while(current.next!=null&&current.next.next!=null)
        {
            ListNode p=current.next;
            ListNode q=current.next.next;
            ListNode  temp=current.next.next.next;
 
            current.next=q;
            q.next=p;
            p.next=temp;
            current=p;
        }
        return dummy.next; 
    }
}

力扣 25  k个一组翻转链表

 注意两点:

(1)先把prev指针和end指针的位置确定好,然后start=prev.next即可,next=end.next即可

(2)一轮之后,prev=start(此时start和end的位置是start在右边,end的位置在左边)

end=prev(这就又把下轮的prev和end位置确定好了)

class Solution {
    public ListNode reverseKGroup(ListNode head, int k) 
    {
        ListNode dummy=new  ListNode(0);
        dummy.next=head;

        ListNode prev=dummy;
        ListNode end=dummy;

        while(end.next!=null)
        {
            for(int i=0;i<k&&end!=null;i++)//找到end指针的位置
            {
               end=end.next;
            }

            if(end==null)     break;//不足k个结点,这k个结点不用反转

            ListNode start=prev.next;
            ListNode next=end.next;

            end.next=null;//断开end指针

            prev.next=reverse(start);//将start-end区间进行反转

            start.next=next;//重新将链表连起来

            prev=start;//此时end指针在左,start指针在右
            end=prev;
        }
        return dummy.next;
    }

    public  ListNode  reverse(ListNode  head)
    {
       ListNode  dummy=new ListNode(-1);
       dummy.next=null;
       
       while(head!=null)
       {
           ListNode   p=head.next;
           head.next=dummy.next;
           dummy.next=head;
           head=p;
       }
       return   dummy.next;
    }
}

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

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

相关文章

SRC挖掘之Access验证校验的漏洞挖掘

漏洞已修复&#xff0c;感谢某大佬的知识分享。 任意用户密码重置->可获取全校师生个人mingan信息 开局就是信息收集。 对于挖掘edu的信息收集 1.可尝试谷歌搜索语法&#xff0c;获取学号信息 2. 旁站的渗透获取 3. 学校的贴吧获取(大部分都是本校学生) 当然我就是闲&a…

什么是热部署?Spring Boot如何进行项目热部署?

在开发过程中&#xff0c;通常会对一段业务代码不断地修改测试&#xff0c;在修改之后往往需要重启服务&#xff0c;有些服务需要加载很久才能启动成功&#xff0c;这种不必要的重复操作极大降低了程序开发效率。为此&#xff0c;Spring Boot框架专门提供了进行热部署的依赖启动…

sql-labs-Less1

靶场搭建好了&#xff0c;访问题目路径 http://127.0.0.1/sqli-labs-master/Less-1/ 我最开始在做sql-labs靶场的时候很迷茫&#xff0c;不知道最后到底要得到些什么&#xff0c;而现在我很清楚&#xff0c;sql注入可以获取数据库中的信息&#xff0c;而获取信息就是我们的目标…

1.时间复杂度与空间复杂度

时间复杂度时间复杂度是用来估算算法运行时间的式子&#xff08;单位&#xff09;&#xff1b;一般来说&#xff0c;时间复杂度高的算法比时间复杂度低的算法慢&#xff1b;常见的时间复杂度&#xff08;按照算法运行所耗的时间排序&#xff09;O(1) < O(logn) < O(n) &l…

面试半年,总结了1000道2023年Java架构师岗面试题

半年前还在迷茫该学什么&#xff0c;怎样才能走出现在的困境&#xff0c;半年后已经成功上岸阿里&#xff0c;感谢在这期间帮助我的每一个人。 面试中总结了1000道经典的Java面试题&#xff0c;里面包含面试要回答的知识重点&#xff0c;并且我根据知识类型进行了分类&#xf…

Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值)

一、父传子、父传后代 方式一&#xff1a;子通过props来接收 父组件&#xff1a;父组件引入子组件时&#xff0c;通过<child :parentValue "parentValue"></child>子组件传值。 备注&#xff1a;这种方式父传值很方便&#xff0c;但是传递给后代组件不…

高燃!GitHub上标星75k+超牛的Java面试突击版

前言不论是校招还是社招都避免不了各种面试。笔试&#xff0c;如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的&#xff0c;我这个有章可循‘说的意思只是说应对技术面试是可以提前准备。运筹帷幄之后&#xff0c;决胜千里之外!不打毫无准备的仗,我觉得大…

电子科技大学软件工程期末复习笔记(四):软件设计

目录 前言 重点一览 软件工程设计 软件设计定义 软件设计包含的两类活动 软件设计包涵 软件的质量属性 各种设计技术 程序结构(深度、宽度、扇入、扇出) 完整的设计规格 软件体系架构 用户界面设计的3条原则 用户界面设计的3种分析 结构化设计方法 结构化程序设…

linux所需的pcre库和zlib库从网上下载的步骤

在linux服务器安装Nginx的时候需要下载一些依赖的库,其中就有pcre 和 zlib正常情况下执行如下命令就可以了yum install -y pcre pcre-develyum install -y zlib zlib-devel但是有时候会有各种原因报错,你可以选择去解决,也可以换个思路,那么我不从yum源下载了,直接从网上下载所…

PGLBox 超大规模 GPU 端对端图学习训练框架正式发布

作者 | PGLBox项目组 导读 PGLBox是百度研发的基于GPU的大规模图模型训练框架&#xff0c;支持数百亿节点和边的图模型全GPU训练&#xff0c;已在百度广泛部署。相比业界主流的分布式 CPU 解决方案&#xff0c;PGLBox 具有超高性能、超大规模、算法丰富、灵活易用、落地广泛等优…

springBoot 处理静态资源原理

springBoot是如何自动处理静态并映射静态资源的&#xff0c;直接上代码。 一、在springBoot autoconfigure jar包中&#xff0c;存在WebMvcAutoConfiguration 自动配置类&#xff0c;该类的生效条件是&#xff1a;存在Servlet ,DispatcheServlet ,WebMvcConfigurer这三个类…

k8s 配置ingress 并做一个demo

需求&#xff1a;k8s 配置好之后除了 nodeport 以外都是对集群内部的行为使用nodeport 并不是很友好&#xff0c;要自己处理很多的端口管理使用ingress 可以更好的整合配置服务进程&#xff1a;下载ingress-nginx 的yaml 文件https://github.com/kubernetes/ingress-nginx/blob…

京东HBase异地多活调研

京东HBase平台架构 HBase Replication原理 HBase的Replication是基于WAL日志文件的&#xff0c;在主集群中的每个RegionServer上&#xff0c;由ReplicationSource线程来负责推送数据&#xff0c;在备集群的RegionServer上由ReplicationSink线程负责接收数据。ReplicationSourc…

Web自动化测试框架Selenium

作者&#xff1a;霍格沃兹测试开发学社 链接&#xff1a;https://www.zhihu.com/question/59854292/answer/2827875817 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 什么是自动化测试 自动化测试就是&#xff0…

电子技术——AB类输出阶

电子技术——AB类输出阶 原理 交越失真可以通过通过一个较小的偏置电流解除&#xff0c;如下图&#xff1a; QNQ_NQN​ 和 QPQ_PQP​ 的基极之间存在偏置电压 VBBV_{BB}VBB​ 。对于完美匹配的晶体管&#xff0c;当 vI0v_I 0vI​0 的时候&#xff0c;此时 vO0v_O 0vO​0 。每…

初识CSS

1.CSS语法形式CSS基本语法规则就是:选择器若干属性声明由选择器选择一个元素,其中的属性声明就作用于该元素.比如:<body><p>这是一个段落</p><!-- style可以放在代码的任意地方 --><style>p{/* 将字体颜色设置为红色 */color: red;}</style&g…

Android 动画详解

Android动画的分类与使用学习Android必不可少的就是动画的使用了&#xff0c;在Android版本迭代的过程中&#xff0c;出现了很多动画框架&#xff0c;这里做一个总结。Android动画类型分类逐帧动画【Frame Animation】&#xff0c;即顺序播放事先准备的图片。补间动画【Tween A…

Mysql——双机同步

遇到一个需求&#xff0c;需要两台服务器的上的mysql数据库数据实时同步&#xff0c;包括结构也同步。 利用mysql本身的binlog确实实现了这个效果&#xff0c;但是因为个实际业务场景不满足&#xff0c;所以pass掉了&#xff0c;但是记录一下。 目录一、环境二、配置2.1 创建同…

件测试之易用性测试

一、易用性测试概述我们所说的易用性测试是指软件界面的测试&#xff0c;而对于产品的易用性来说&#xff0c;不仅仅是软件界面&#xff0c;还包括硬件(即产品的外观)&#xff0c;如按钮图标是否易懂、菜单是否易找到等。易用性主要研究3个方向&#xff1a;用户研究、交互设计、…

【使用两个队列实现栈】

文章目录前言使用两个队列实现栈1.队列接口函数引入2.栈的初始化3.向栈中插入元素4.出栈操作5.取出栈顶元素6.判断栈是否为空7.释放内存空间总结前言 本文章主要介绍栈和队列的相互转换。 使用两个队列实现栈 我们知道&#xff0c;栈的特点是后进先出&#xff0c;而队列的特点…