Leetcode刷题之链表小结(1)|92反转链表|206反转链表

server/2024/9/23 9:36:15/

@TOC

小结

1. 如何反转某一个节点的指向?

206反转链表(简单)的递归解法——该方法的理念是: 若节点k+1到节点m已经被反转,而我们当前处于k位置,那么我们希望k+1指向k, 体现在以下代码的head->next->next = head;这一句,可以记做一种常用的反转单个节点的方法.

class Solution {
public:ListNode* reverseList(ListNode* head) {if (!head || !head->next) {return head;}ListNode* newHead = reverseList(head->next);head->next->next = head;head->next = nullptr;return newHead;}
};

2. 头插法|穿针引线法

在92反转链表(中等难度)题目中, 出现了“穿针引线”、“头插法”等词汇.

题目的要求是反转链表中从left开始到right结束的元素, 在图解中,用橙色部分表示.头插法的理念是,在待反转区域,每遍历到一个节点cur, 都将它的下一个节点next, 放置到cur的前面.

头插法分为两步, 一是“穿针引线”, 二是拉直.

“穿针引线”的过程就是确定这一次操作要确定的各节点位置, 想象第一次动手时, 当前我们拿着一根针在7的位置上, 那么“头”就是5, 接下来穿到2, 再穿到4, 然后拉直这条线, 新的节点就如图2所示了.

在这里插入图片描述
拉直以后:

在这里插入图片描述

官方的头插法代码:

class Solution {
public:ListNode *reverseBetween(ListNode *head, int left, int right) {// 设置 dummyNode 是这一类问题的一般做法ListNode *dummyNode = new ListNode(-1);dummyNode->next = head;ListNode *pre = dummyNode;for (int i = 0; i < left - 1; i++) {pre = pre->next;}ListNode *cur = pre->next;ListNode *next;for (int i = 0; i < right - left; i++) {next = cur->next;cur->next = next->next;next->next = pre->next;pre->next = next;}return dummyNode->next;}
};

二级目录

三级目录


http://www.ppmy.cn/server/11812.html

相关文章

Mysql 字段名与关键字重名如何写查询语句

解决方案&#xff08;用反引号 包裹&#xff09; 当字段名与关键字重名时&#xff0c;可以使用反引号&#xff08;&#xff09;将字段名括起来&#xff0c;以避免冲突。 例如&#xff0c;假设有一个表格名为users&#xff0c;其中有一个字段名为select。如果要使用含有关键字…

[Meachines][Easy]Bizness

Main $ nmap -p- 10.10.11.252 --min-rate 1000 $ dirsearch -u https://bizness.htb/ $ whatweb https://bizness.htb/control/login 存在一个未授权的RCE $ git clone https://github.com/jakabakos/Apache-OFBiz-Authentication-Bypass.git $ cd Apache-OFBiz-Authenticat…

LeetCode刷题实战4:寻找两个正序数组的中位数

题目内容 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,3], nums2 [2] 输出&#xff1a;2.0…

Linux内核驱动开发-006内核定时器

1驱动程序 /*************************************************************************> File Name: timer.c> Author: yas> Mail: rage_yashotmail.com> Created Time: 2024年04月23日 星期二 19时20分42秒*************************************************…

[ LeetCode ] 题刷刷(Python)-第28题:找出字符串中第一个匹配项的下标

题目描述 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 示例 1&#xff1a; 输入&#xff1a;…

前端学习<四>JavaScript基础——44-键盘事件

鼠标的拖拽事件 拖拽的流程&#xff1a; &#xff08;1&#xff09;onmousedown&#xff1a;当鼠标在被拖拽元素上按下时&#xff0c;开始拖拽&#xff1b; &#xff08;2&#xff09;onmousemove&#xff1a;当鼠标移动时被拖拽元素跟随鼠标移动&#xff1b; &#xff08;…

路由引入,过滤实验

实验拓补图 实验目的&#xff1a; 1、按照图示配置 IP 地址&#xff0c;R1&#xff0c;R3&#xff0c;R4 loopback口模拟业务网段 2、R1 和 R2 运行 RIPv2,R2&#xff0c;R3和R4运行 OSPF&#xff0c;各自协议内部互通 3、在 RIP 和 oSPF 间配置双向路由引入,要求除 R4 上的…

FLAML框架学习干货整理

一、FLAML介绍 FLAML (Fast and Lightweight AutoML) 是一个用于自动机器学习&#xff08;AutoML&#xff09;的 Python 库&#xff0c;旨在快速且资源效率高地找到机器学习任务的最优模型和其超参数。它由微软研究院开发&#xff0c;适用于广泛的机器学习任务&#xff0c;如分…