【链表OJ 2】反转链表

news2024/11/23 10:12:39

前言: 

        🎈欢迎大家来到Dream_Chaser~的博客🎈

        🚩本文收录于 C--数据结构刷题的专栏中 -->http://t.csdn.cn/n6UEP

        首先欢迎大家的来访,其次如有错误,非常欢迎大家的指正,互相学习进步。

一.反转链表

来源:206. 反转链表 - 力扣(LeetCode)

题目:

1.迭代法

思路:

  1. 首先,检查链表头节点是否为空。如果为空,表示链表为空,直接返回NULL。

  2. 定义三个指针变量:n1n2n3。初始时,n1指向NULL,n2指向头节点head,n3指向n2的下一个节点。

  3. 进入循环,条件是n2不为NULL。循环的目的是将当前节点n2的指针指向它的前一个节点n1,实现反转。

  4. 在循环内部,首先将n2next指针指向n1,完成反转操作。

  5. 然后,更新n1n2n3的值。将n2赋值给n1,将n3赋值给n2,同时判断n3是否为NULL,如果不为NULL,则将n3更新为n3的下一个节点。

  6. 当循环结束时,所有节点都被反转了,n1指向原链表的最后一个节点,也就是反转后的链表的头节点

  7. 返回n1,作为反转后的链表的头节点

动图演示:

struct ListNode* reverseList(struct ListNode* head) {
    if (head == NULL)
        return NULL;
    struct ListNode* n1 = NULL;
    struct ListNode* n2 = head;
    struct ListNode* n3 = n2->next;
    while (n2)
    {
        n2->next = n1;

        n1 = n2;
        n2 = n3;
        if (n3)//加上这里的原因,当n2指向最后一个结点时.此时n3已经为NULL
            n3 = n3->next;//若对空指针解引用就会出现异常
    }
    return n1;
}

 代码执行: 

注意:如果去掉条件if(n3)则会出现问题

原因: 

 if (n3)  加上此条件的原因,当n2指向最后一个结点时.此时n3已经为NULL
            n3 = n3->next;//若对空指针解引用就会出现异常

 执行: 

2.头插法

  1. 创建两个指针变量:currheadcur用于迭代遍历原始链表,rhead用于指向反转后的链表的头部。

  2. 进入while循环,循环条件为cur不为NULL,即还未遍历完原始链表。

  3. 在循环内部,首先创建一个指针变量next,用于保存cur的下一个节点的地址,以防止丢失。

  4. 执行头插操作,将cur节点插入到反转链表的头部。将curnext指针指向rhead,实现插入操作。然后更新rhead,使其指向cur,将cur成为新的头部。

  5. 更新cur,使其指向next,继续迭代遍历原始链表的下一个节点。

  6. 循环结束后,原始链表遍历完毕,整个链表已经完成反转。返回rhead,即为反转后的链表的头部

动图演示:

struct ListNode* reverseList(struct ListNode* head) {
       struct ListNode* cur=head,*rhead=NULL;
      while(cur)
      {
      struct ListNode* next=cur->next;
     
      //头插
      cur->next=rhead;
      rhead=cur;
     //迭代
      cur=next;
      } 
      return rhead;
}

执行:

        本文到此结束,如有错误,欢迎大家指正,感谢来访。🚩

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

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

相关文章

【高危】 Microsoft Exchange Server 远程代码执行漏洞

漏洞描述 Microsoft Exchange Server 是微软公司开发的一款邮件服务器。 Microsoft Exchange Server 受影响版本中,具有普通用户权限(Exchange 用户凭据)的攻击者可能在同一内网环境中攻击Exchange服务,远程执行任意代码。 由于…

【学习】若依源码(前后端分离版)之 “ 上传图片功能实现”

大型纪录片:学习若依源码(前后端分离版)之 “ 上传图片功能实现” 前言前端部分后端部分结语 前言 图片上传也基本是一个项目的必备功能了,所以今天和大家分享一下我最近在使用若依前后端分离版本时,如何实现图片上传…

Oracle到DM实时数据同步实施方案

目录 1 项目概述 2 需求分析 3 实施操作 3.1 历史数据全量同步 3.2 增量数据实时同步 4 问题总结 4.1 字符型非空约束 4.2 字符型唯一索引尾部空格 1 项目概述 将Oracle 11g RAC生产环境数据同步到DM8分析环境,Oracle数据库大小1.5T,日增归档10…

Windows和Linux系统上的矢量运算:指令级并行计算SIMD(SSE/AVX)应用细节以及相关跨平台的源码解释

注:本文的SIMD,指的是CPU(base intel x86 architecture)指令架构中的相关概念。不涉及GPU端的算力机制。下面的代码在Win10和Linux上均可用。 基本概念 SSE: Streaming SIMD Extensions, x86 architecture AVX: Advanced Vector Extensions SIMD&#…

vue项目中Uncaught runtime errors:怎样关闭

原文链接: yvue项目中Uncaught runtime errors:怎样关闭_笑毅的博客-CSDN博客https://blog.csdn.net/qq_36877078/article/details/131175355是webpack-dev-server弄出来的 解决办法 在vue.config.js中添加如下配置 module.exports defineConfig({...devServer:…

GDB 打印uint64位数据值

今天一来组长就让我查一个问题,说是我们的接口返回的数据需要赋值为-1,返回给上层调用。结果我一看代码,代码里就是写死了赋值 -1 的,但他说实际返回的好像不是 -1,所以只能让我gdb 跟踪一下了。本来想用 window 下的计…

[Linux]进程间通信(上篇)——匿名管道(管道原理,实现示例,端口情况探究!!)

hello,大家好,本篇文章介绍Linux进程间的通信,包含内容有进程间通信的介绍、理解,管道的介绍使用:匿名管道,匿名管道的实现示例,匿名管道端口4种情况的探究。 目录 1️⃣进程间通信 &#x1f…

ruby send call 的简单使用

refer: ruby on rails - What does .call do? - Stack Overflow Ruby使用call 可以调用方法或者proc m 12.method("") # > method gets the method defined in the Fixnum instance # m.class # > Methodm.call(3) #> 15 # 3 is passed inside the…

项目管理:四步帮你轻松制定计划

当项目经理接手一个项目的时候,做一个项目的日程安排是必须的,因为这是决定项目是否成功完成的最重要任务之一。 项目经理制定项目计划的步骤: 1、确定目标 项目目标极为关键,只有目标想清楚了,才可能正常开展后期…

选择CRM系统时需要有哪些功能?

企业在选型时,众多的CRM品牌是否让您挑花了眼?CRM客户管理系统哪个好用? 1、功能强大 Zoho CRM提供了从销售、市场营销、客服到项目管理、人力资源、财务等全方位的CRM功能,可以满足不同行业和规模的企业的需求。可以提供销售自…

Python(七十四)集合的数学操作

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

产品管理经验分享:删掉 500 个产品待办事项后,我逃离了「假敏捷」

文章开始之前,我想先请大家思考几个问题: 你的产品待办列表中有多少项工作?其中最早的待办事项是什么时候创建的?你和 Scrum 团队多久会维护一次列表中那些从没进过迭代的「钉子户」事项? 我第一次问自己时&#xff0…

esp8266使用arduinoJson与tft_espi库发生冲突解决方法

esp8266使用arduinoJson与tft_espi库发生冲突解决方法 arduinoJson与tft_espi库发生冲突解决方法下载arduinoJson5.0版本的,不要用最新版本 示范代码: // Copyright Benoit Blanchon 2014 // MIT License // // Arduino JSON library // https://git…

AIGC创世计划设计视频课程

课程介绍 AIGC创世计划设计视频课程是一门专注于创意设计的课程。通过视频教学,学习者将了解到关于创意设计的理论知识和实践技巧,并能够运用这些知识和技巧进行创作。本课程涵盖了多个设计领域,包括平面设计、产品设计、UI/UX设计等。无论是…

C++,文本文件,写文件操作

代码演示&#xff1a; #include <iostream> using namespace std;//1、包含头文件 #include<fstream>void test() {//2、创建流对象ofstream ofs;//3、打开文件(默认源文件路径&#xff09;ofs.open("test.txt", ios::out);//4、写数据ofs << &qu…

Leetcode每日一题:1289. 下降路径最小和 II(2023.8.10 C++)

目录 1289. 下降路径最小和 II 题目描述&#xff1a; 实现代码与解析&#xff1a; 动态规划 原理思路&#xff1a; 1289. 下降路径最小和 II 题目描述&#xff1a; 给你一个 n x n 整数矩阵 grid &#xff0c;请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路…

【Linux取经路】基础开发工具——gdb篇

文章目录 一、背景知识介绍二、gdb常用指令 一、背景知识介绍 程序的发布方式有两种&#xff0c;Debug模式和release模式。Debug是开发者模式&#xff0c;而用户最终使用的是release。Debug模式下的代码&#xff0c;可以被追踪、调试&#xff0c;因为在Debug模式下形成的可执行…

浪潮数字咨询专家孙崇虎受邀为第十二届中国PMO大会演讲嘉宾

浪潮数字企业技术有限公司集团管控事业部咨询专家孙崇虎先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;VUCA时代的项目管理信息化应对。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 当前…

LiveNVR监控流媒体Onvif/RTSP功能-如何配置默认用户账户及用户密码修改用户名

LiveNVR监控摄像头如何配置默认用户账户及用户密码修改用户名 1、默认用户名密码1.1、初次配置启动1.2、重新配置启动 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、默认用户名密码 1.1、初次配置启动 在解压目录下的 livenvr.ini 里面添加如下配置&#xff0c;配置后再启动&a…

ios 知识

IOS 类文件.h和.m中interface的区别 大家都知道我们在创建类文件时会发现&#xff1a; #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend和 #import "ViewController.h"interface ViewController ()end那么他们之间有何区别呢&#x…