AcWing 35. 反转链表(两种链表两种通法,头插法+原地法)

牛客网算法刷题指南:从入门到面试通关 算法刷题是提升编程能力和通过技术面试的重要途径。常见的算法题类型包括数据结构操作(如链表反转、二叉树遍历)和经典算法(如动态规划、二分查找)。通过系统化的分类训练和错题分析,可以有效掌握解题思路和编码技巧。牛客网作为本土化刷题平台,提供大厂真题题库、即时评测反馈和可视化题解,特别适合准备国内技术面试。以BM7链表中环的入口结点为例,其快慢指针解法结合动画演示,能帮助快速理解Floyd判圈算法原理。建议从通过率40%以上的简单题目入手,逐步构建解题框架和面试表达能力。 阅读详情

1.无头结点的链表

在分析整个问题之前,我们先做一个假设。假设“NULL”是一个特殊的“结点”,它只能被其他结点指向而不能指向其他结点。这里一定要强调把NULL作为结点看待。

我们可以做个图:

NULL    1->2->……->n->NULL

其中,最左侧的NULL是新链表的NULL,我们期待的结果是:

NULL<-1<-2<-……<-n    NULL

结合下面的代码,再根据此图进行手动模拟整个过程就能体会到这么做的好处。

1.1双指针头插法

原理是从原链表头部依次取结点,使用头插法插入到新链表中。

具体代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *p, *q;
        p = head;
        head = NULL; //head指向最左侧的NULL
        while(p){
            q = p, p = p -> next;
            q -> next = head;
            head = q;
        }
        return head;
    }
};

1.2三指针原地法

具体代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *p, *q, *r;
        p = head;
        q = NULL; //q指向最左侧的NULL
        while(p){
            r = p -> next;
            p -> next = q;
            q = p, p = r;
        }
        return head = q;
    }
};

2.带头结点的链表

注意:带头结点的链表的反转代码只要将以上两份代码中所有的“head”全部用“head->next”替换即可!

分析过程与上面相似,大家可以结合代码并手动模拟整个过程。

第3版•系统集成项目管理工程师(中级) │ 第6章 数据工程 🥏第3版•系统集成项目管理工程师(中级) │ 第6章 数据工程 阅读详情

相关推荐

基于大模型的自动驾驶智能体:Agent-Driver架构、训练与实战指南

自动驾驶系统正从传统的模块化流水线向以智能体为核心的新范式演进。其核心原理在于将车辆视为一个能够与环境持续交互的自主决策智能体,通过多模态感知、记忆管理和基于大模型的推理能力,实现对复杂交通场景的理解与应对。这一技术价值在于利用大模型的常识推理和泛化能力,有望解决传统方法在长尾场景下面临的挑战。在应用场景上,智能体驱动架构特别适合处理动态交互密集、需高层语义理解的城区驾驶、无保护转弯及突发状况应对。本文聚焦的Agent-Driver项目,正是这一方向的典型实践,它通过融合视觉、语言大模型与强化学习,构建了一

weixin_28729843的博客 529

【数据结构】反转单向链表的方法之头插法(含原理讲解及代码实现)

将单向链表进行反转的方法很多,这里我们讲解一种比较简单的方法——头插法

m0_53133879的博客 2343

ubuntu18.04安装Nvidia显卡驱动后黑屏及网络、蓝牙驱动消失的解决方案

ubuntu18.04安装Nvidia显卡驱动后黑屏及网络、蓝牙驱动消失的解决方案

weixin_40735291的博客 6618

反转链表-头插反转法

1)思想是指在原有链表的基础上,依次将位于链表头部的节点摘下,然后采用从头部插入的方式生成一个新链表,则此链表即为原链表的反转版。一开始创建一个新的头结点,然后在创建一个temp指针。...

有朋自远方来,不亦乐乎。 2139

Rstudio安装org.Hs.eg.db

自己也是个小白,初次安装org.Hs.eg.db碰到好多问题,步骤总结如下: 第一,instal.packages()安装,不行则换 BiocManager::install() 第二,如BiocManager不成,说明不是最新版本,可按提示安装最新版 BiocManager::install(version = '3.13') #由于R版本较新,按照提示中的相关信息,安装最新版本的 第三,再次安装 BiocManager::install("org.Hs.eg.db") 第四,之后每个人.

ZH_DDong的博客 2万+

【数据分享】1985-2023年30米CLCD土地覆盖栅格数据分享

总的来说,CLCD 反映了中国快速的城市化进程和一系列生态工程,揭示了气候变化条件下人为对 LC的影响,其在全球变化研究中具有潜在应用价值。最后,通过目视解译的独立样本和第三方测试样本评估CLCD的准确性。特别地,该研究将CLCD产品与目前最先进的30m专题产品包括不透水表面积(ISA)、地表水和森林进行比对,以综合评估CLCD的质量(以下为技术流程图)。数据分类:分为九类用地,该数据包括9种用地类型,分别为:农田、森林、灌木、草原、水域、冰雪、裸地、不透水面、湿地。数据格式:.tif格式。

weixin_61129400的博客 6924

反转链表之头插法

反转单链表之头插法

znzns的博客 422

104、母线电容设计与选型

母线电容选型,容值不是最关键的,纹波电流和温度才是。很多炸机事故,不是容值不够,而是纹波电流超标导致过热。选电容时,多花点时间算纹波电流,比盲目加大容值有效得多。另外,别迷信进口品牌。国产电容(如江海、艾华)在常规应用里完全够用,价格只有进口的1/3。但高频特性确实有差距,所以高频去耦一定要用薄膜电容。最后,留个调试技巧:用示波器测母线电容两端的电压纹波,同时用电流探头测电容的纹波电流。如果纹波电流波形有尖峰,说明ESL太大,需要并联高频电容。如果纹波电压是低频波动,说明容值不够。

2401_88858637的博客 50

反转链表的四种方法

分享了原地反转,头插,迭代,递归四种反转链表的方法。

z3551906947的博客 1万+

CondaHTTPError: HTTP 404 not found for url https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs解决方案

本文主要介绍了CondaHTTPError: HTTP 404 not found for url https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main解决方案,希望能对使用xx的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 17万+

PyTorch生成式人工智能(25)——基于Transformer实现机器翻译

不同于循环神经网络 (RNN) 按顺序处理数据,Transformer 以并行的方式处理输入数据(例如句子)。这种并行处理提高了效率,但并未使其能够识别输入的顺序。为了解决这个问题,Transformer 向输入的词嵌入中添加了位置编码。这些位置编码是分配给输入序列中每个位置的独特向量,其维度与输入词嵌入对齐。本节将以英语到法语的翻译为例,通过介绍如何训练 Transformer 模型将英语句子转换为法语,深入理解 Transformer 的架构及自注意力机制的运作方式。

盼小辉丶的博客 2735

头插法实现链表反转

以包含四个元素、带有头结点的链表l为例: head->a1->a2->a3->a4; 保持头结点不变,头插法实现链表反转步骤为: 1: 将a2插在a1前面,该链表变为: head->a2->a1->a3->a4; 2: 将a3插在a2前面,该链表变为: head->a3->a2->a1->a4; 2: 将a4插在a3前面,该链表变为: head->a4->a3->a2-

jiao1197018093的专栏 5782

目标检测: yolo26在RK3588上部署

YOLO26发布:端到端目标检测新突破 摘要:Ultralytics最新发布的YOLO26算法采用原生端到端设计,无需NMS后处理,显著提升推理效率。该模型基于三大核心原则: 简洁性:消除NMS步骤,实现直接预测 部署效率:简化集成流程,降低延迟 训练创新:引入MuSGD混合优化器,加速收敛 部署教程显示,YOLO26可适配RK3588等边缘设备,通过ONNX转换和RKNN工具链实现高效部署。其创新架构特别优化了分割、姿态估计等专业任务,标志着目标检测技术的重要革新。 (字数:149)

qianxun 1446

AcWing 35 反转链表

题目描述: 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。 样例 输入:1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULL 输出:5-&gt;4-&gt;3-&gt;2-&gt;1-&gt;NULL 分析: 方法一: 头插法,实在汗颜,因为单链表操作简单所以当初没认真思考每个知识点,导致写个头插法半天找不到错误。 开始我这样写q = ...

昂昂累世士的博客 166

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Acwing第35题(反转链表)

相关题目: 反转链表https://www.acwing.com/problem/content/description/33/ 解题思路: 画图加上头插法可以解决该问题。 相关代码: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * };

正在学算法的小朋友的博客 787

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

题解:反转链表

AcWing:反转链表

m0_72697440的博客 142

【AcWing-20211202个人训练】个人题解

It's all problem about Data structure tonight.It's true easy if you understand pointer.

ベルリンの初雪 393

AcWing解题目录(C++)

# 试题名称 思想方法 难度 试题来源 1 A+B 简单 AcWing 2 01背包问题 简单 3 完全背包问题 简单 4 多重背包问题I 简单 5 多重背包问题II 中等 6 多重背包问题...

Zee_Chao的博客 900

《剑指offer》刷题总结

从三月初开始刷剑指offer上面的题,到现在花了近二十天的时间终于刷完了。应该说,掌握上面的技巧应付一些公司面试题和小公司的笔试题是完全没有问题的。之前参加一个公司笔试,算法题就有一题是剑指offer上二维数组查找的那题(AcWing15),较为简单,但是应付大公司的笔试可能还远远不够。剑指offer的76道题目的题解链接是《剑指offer》题解。(下面题号较多便不附上各题的链接了) 下面简单总...

昂昂累世士的博客 1654

反转链表-----头插法/尾插法/递归

链表是一种数据结构,它包括物理结构和逻辑结构;在物理结构上它表现为非连续、非顺序的性质,然而在逻辑上链表是一种顺序结构。它解决顺序表(简单理解为C语言数组)调整大小带来的数据复制问题,可以实现在O(1)的时间范围内实现插入和删除,但也失去了顺序表的随机访问特性。其结构包括一个数据域和指针域,数据区域用于保存数据,指针域用于保存下一个元素的地址,C语言定义如下:int data;//数据域//指针域用图示表现链表为:【数据结构】链表(单链表实现+详解+原码)-优快云博客。

2301_76686024的博客 1357

链表反转的四种方法(栈、头插法、三指针法、递归法)

单链表反转或转置的四种方法 链表的反转实质上是反转链表上的内容: 若链表存储的数据是:1->2->3->4->5; 那么反转后则是:5->4->3->2->1; 下面来介绍链表反转的4种方法:(数据用1->2->3来表示,反转后则是3->2->1) 1.通过栈来实现 总体思路是: 1.先让链表中的内容依次进栈,用栈记录链表中的内容 2.接着依次出栈,更新链表中的数据即可 3.这种方法的思路简答,易于理解,但空间复杂度为O(n),时间复

Ezrealwj的博客 1万+

【LeetCode92】反转链表 II(头插法)

1.题目 2.思路 头插法,关键代码: for(int i = 0; i < right - left; i++){ next = cur->next; cur->next = next->next; pre->next = next; next->next =cur; } 三个指针的顺序:pre,cur,next (1)将cur的next指

发现问题,并解决问题,批判性思维 1315

单链表四种实现方式之一:使用头插法实现链表的反转

利用头插法实现链表的反转 方法简介: 一:创建一个新的空链表,如下图所示: 二:从原链表中摘除头部节点 1,并以头部插入的方式将该节点添加到新链表中 三:从原链表中摘除头部节点 2,以头部插入的方式将该节点添加到新链表中 四:继续重复以上工作,先后将节点 3、4 从原链表中摘除,并以头部插入的方式添加到新链表中 经过以上四个步骤,该链表已经反转完成 代码实现: package com.linkedlist; import java.util.Arrays; /*链表节点类*/ class Li

Masterxiaoyang的博客 1139

两种链表反转的方法(头插法和原地反转法,图解清晰,一看就会)

关于链表反转的方法,包含原地反转和头插法反转

zhang050118的博客 3629

C数据结构-翻转指针法、头插法实现单链表反转

数据结构基础算法:单链表反转。翻转指针与头插法介绍

wyd_333的博客 1310

C语言笔试题之反转链表(头插法)

【代码】C语言笔试题之反转链表(头插法)

qq_41878292的博客 692

C语言链表翻转的三种实现方式(栈、头插法、递归法)

题目:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 背景:这道题乍一看还是非常简单的,我两个月前做这个题的时候,用的是栈后进先出的特性。今天复习这个题的时候使用的是头插法,因为头插法精准而优雅,代码还简单。但这道题给我的几个启示: ①用自己最擅长的方法解...

春季觉醒的博客 2019
上一篇: AcWing 34. 链表中环的入口结点(快慢指针赛跑+地址映射)
下一篇: AcWing 36. 合并两个排序的链表(归并+混洗)
Zee_Chao
博客等级 码龄11年 168粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值