代码随想录刷题笔记(DAY4)

今日总结:今天把中心放在前端学习上,最后一个题没有完全理解,明天早起补上吧。勉强算完成任务。

Day 4

01. 两两交换链表中的节点(No. 24)

题目链接

代码随想录题解

1.1 题目

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

img

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

1.2 笔记

先来分析需不需要虚拟头节点,虚拟头节点是为了让处理头节点的方式和处理其他节点的方式相同,不用再单独写出来,所以先考虑头节点和其他节点的处理方式是否一样:

交换一个中间的节点需要哪些操作呢?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

需要将前一个节点,也就是上图第一个点指向第三个点,但是头节点并没有前一个节点,所以我们得出头节点和其他节点的处理方式是不同的,所以引入虚拟头节点。(上图是要进行的操作,标号不代表顺序)

也很容易能看出,要交换两个节点需要前一个节点和后一个节点,所以我们的 cur 要定义在前一个节点:

这里我们先给上个图加上序号

  1. 先让 cur 指向它的下下个节点(3 节点),但这时我们发现 cur 的下一个节点(2 节点)是不可达的,定义 temp1 指向这个节点

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 使得 temp1 (节点 2 )的下一个节点指向 (节点 4)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 让 (节点 3)再指向 (节点2)这样拉直后就实现了反转

在这里插入图片描述

接下来我们来看循环遍历的出口,如果是偶数个元素的话我们要保证 cur 后面有一个元素(有一个元素就代表后面还有一组元素,还需要循环交换),奇数个元素的话则需要保证 cur 的后面有两个个元素就结束(有两个元素才需要交换,一个的话不需要交换直接结束),先尝试写出循环遍历的出口

while(cur.next.next != null)
while(cur.next != null)

很明显看出这两个是包含关系,则可以写出

while(cur.next != null && cur.next.next != null)
1.3 代码
/*** 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) {ListNode dummyHead = new ListNode(0, head); // 虚拟头节点ListNode cur = dummyHead;ListNode temp1; // 临时节点ListNode temp2;while (cur.next != null && cur.next.next != null) {temp1 = cur.next;cur.next = cur.next.next;temp1.next = cur.next.next;cur.next.next = temp1;cur = cur.next.next;}return dummyHead.next;}
}

02. 删除链表的倒数第 N 个结点(No. 19)

题目链接

代码随想录题解

1.1 题目

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

img

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

1.2 笔记

这道题的关键是如何找到删除节点的前一个节点,然后我们只需要让 node.next = node.next.next 就完成了删除操作,下面来思考如何找到这个节点呢?

因为题目里面给的是倒数第 N 个节点,所以很容易想到倒序遍历链表,回顾一下如何倒序遍历链表呢?

public void backtracking(ListNode head) {if (head.next == null) {// 到了最后一个节点return head;}ListNode node = head; // 记录当前栈中的 headbacktracking(head.next);System.sout.println(node); // 实现倒叙输出
}

这道题的思路就变得清晰起来了,递归遍历到最后一个节点然后我们开始计数,直到倒数第 N 个节点的前一个节点,就比如 1 的话需要在倒数第二个栈执行操作,可以写出

        if (--N == 0) {// 要删除的节点的前一个节点node.next = node.next.next;return;}

下面给出完整的代码

1.3 代码
/*** 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 {int N = 0;ListNode dummyNode = new ListNode();public ListNode removeNthFromEnd(ListNode head, int n) {N = n;dummyNode.next = head;backtracking(dummyNode);return dummyNode.next;}public void backtracking(ListNode head) {if (head.next == null) {// 最后一个节点return;}backtracking(head.next);// 递归遍历节点ListNode node = head;if (--N == 0) {// 要删除的节点的前一个节点node.next = node.next.next;return;}return;}
}

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

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

相关文章

STM32F407ZGT6定时器(学习笔记一)

定时器STM32非常重要的外设,也是比较复杂的外设,下面以STM32F407ZGT6为例记录学习内容:(1)基本定时功能,(2)PWM输出功能,(3)PWM互补死区、多通道移…

【Java开发岗面试】八股文—Java基础集合多线程

声明: 背景:本人为24届双非硕校招生,已经完整经历了一次秋招,拿到了三个offer。本专题旨在分享自己的一些Java开发岗面试经验(主要是校招),包括我自己总结的八股文、算法、项目介绍、HR面和面试…

vr体验馆用什么软件计时计费,如遇到停电软件程序如何恢复时间

vr体验馆用什么软件计时计费,如遇到停电软件程序如何恢复时间 一、软件程序问答 如下图,软件以 佳易王vr体验馆计时计费软件V17.9为例说明 1、软件如何计时间? 点击相应编号的开始计时按钮即可 2、遇到停电再打开软件时间可以恢复吗&…

【Spark精讲】一文讲透SparkSQL聚合过程以及UDAF开发

SparkSQL聚合过程 这里的 Partial 方式表示聚合函数的模式,能够支持预先局部聚合,这方面的内容会在下一节详细介绍。 对应实例中的聚合语句,因为 count 函数支持 Partial 方式,因此调用的是 planAggregateWithoutDistinct 方法&a…

【web安全】验证码识别-burp的captcha-killer-modified插件教程(基于百度接口)(总结一些坑)

前言 菜某分享 captcha-killer-modified插件的安装教程 整体安装教程可以看他的 安装captcha-killer-modified插件(windospython环境)_aptcha-killer-modified的安装-CSDN博客 但是有一点补充。 这个里面的codereg.py文件有个问题 可能是版本的问…

最新Redis7哨兵模式(保姆级教学)

一定一定要把云服务器的防火墙打开一定要!!!!!!!!!否则不成功!!!!!!!!&…

Java Log 学习笔记

参考文章: 1.Java 日志从入门到实战 2.Java日志框架的发展历史,你不想了解一下吗 背景 想自定义 logback 配置文件进行日志分级别记录到不同文件,遇到了几个问题(使用的是 spring-boot 构建的项目,spring-boot 版本为…

Activemq存储KahaDb详解

引言 ActiveMQ在不提供持久化的情况下,数据保存在内存中,一旦应用崩溃或者重启之后,数据都将会丢失,这显然在大部分情况下是我们所不希望的。对此ActiveMQ提供了两种持久化方式以供选择。 kahaDB kahaDB是一个基于文件&#xf…

组合总和[中等]

一、题目 给你一个 无重复元素 的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates中的 同一个 数字可以 无限制重复被选取 。如果…

借助 Google Play 游戏电脑版新功能,加速业务增长

作者 / Google Play 游戏总监 Arjun Dayal Google Play 游戏电脑版测试版自去年发布以来,取得了巨大的发展。Google Play 游戏电脑版现在提供 3,000 多种游戏,覆盖 120 多个国家/地区的用户,为玩家提供各种类型的游戏。我们的热门移动游戏目录…

Grafana监控数据可视化

Grafana 是一个可视化面板,有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持 Graphite、zabbix、InfluxDB、Prometheus、OpenTSDB、Elasticsearch 等作为数据源,比 Prometheus 自带的图表展示功能强大太多&am…

Jupyter Notebook又一地理数据可视化扩展!

本次分享一个Jupyter Notebook地理数据可视化扩展:pyl7vp pyl7vpPythonl7vp,如其名,是l7vp在Python3方向的封装,l7vp是蚂蚁集团AntV数据可视化团队开发的地理空间智能应用研发开源平台。 通过pyl7vp可在Jupyter Notebook中轻松完…