单链表反转(C语言)

news2024/12/28 4:58:38

1 问题描述

力扣(LeetCode)--反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

例如:

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

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

 2 解题思路

2.1 三结点反转

单链表的反转问题基本思路就是将链表内每一个结点的next指针所指的下一个地址反转过来,并且把头指针给放到最开始链表的末尾去,完成链表的反转。

而在实现链表反转的过程中,就必须关系到两个节点,即下一个结点要指向上一个结点的过程需要两个节点。在实现反转之后,原本该指向下一个结点的结点指向了上一个结点,这时候就会导致后面的结点丢失。所以综合分析,这里在进行反转链表的过程中,我们需要三个指针,分别对应第一个结点,第二个结点,以及第二个结点之后的第三个结点。

下面用图分析一下:

对于:

①假设我们需要从1->2反转从2->1,就会存在一下这种情况。此时由于node2将原本指向了下一个结点的地址变成了指向node1,则会导致后面的结点全部丢失。

(补充:此过程也是通过①②步骤进行)

所以我们需要三个指针:

②在前两个node1和node2进行了反转之后,将node1=node2,node2=node3,node3=ndoe3->next。

 此时重复以上①②两个步骤:就到了即将结束的位置。

 此时只需要将node2=node1,最后将头指针赋值到末尾来,即可大功告成。

 2.2 头插法反转

定义一个新的头节点,将原链表内一个一个拿下来放到新的头节点后进行头插。

最后再返回NewHead->next即可。

3 完整代码即注释

3.1 三结点反转

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode* prev=NULL;//结点前一个指针node1,初始化为空,因为要让第一个结点
    //指向空
    struct ListNode* cur=head;//中间结点node2
    if(head==NULL)
    {
        return head;
    }
    //必须判空之后才能创建第三个结点,因为如果head为空则会导致无法运行head->next导致程序崩溃。
    struct ListNode* Next=head->next;//后一个结点node3
    if(head->next==NULL)//判断链表是否只有一个结点
    {
        return head;//如果是的话直接返回。
    }
    while(cur)//cur判断程序结束,当cur为NULL说明prev已经是最后一个结点
    {
        cur->next=prev;
        prev=cur;
        cur=Next;//反转前两个节点,把第三个结点赋值给中间结点

        //当cur为NULL之前,Next就已经为NULL
        //所以Next为NULL之后不能进行Next->next的操作,否则程序会崩溃
        if(Next!=NULL)
        {
            Next=Next->next;
        }
    }
    head=prev;//最后把得到的prev赋值给head作为头指针。
    return head;
}

3.2 头插法反转 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode*newhead=(struct ListNode*)malloc(sizeof(struct ListNode));//新头节点
    newhead->next=NULL;//初始化
    struct ListNode*cur=head;
    if(cur==NULL||cur->next==NULL)
    {
        return head;
    }
    while(cur)
    {
    struct ListNode*nextnode=cur->next;
    cur->next=newhead->next;
    newhead->next=cur;
    cur=nextnode;
    }
    return newhead->next;
}

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

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

相关文章

11 Java 方法引用、异常处理

文章目录 前言一、Java接口之函数式编程 --- 接口知识补充1 Function<T,R>泛型接口2 BiFunction<T, U, R>泛型接口3 自定义泛型函数式编程接口 二、方法引用1 方法引用初体验&#xff08;以Array.sort()方法为例&#xff09;2 引用静态方法3 引用其他类成员方法 前…

【面试五】PID控制算法

一、 PID算法简介 PID&#xff08;Proportional-Integral-Derivative&#xff09;控制算法是一种经典的反馈控制方法&#xff0c;广泛应用于自动控制系统&#xff0c;例如温度控制、速度控制、位置控制等。 PID控制算法的核心包含三个部分&#xff1a;比例项&#xff08;P&…

@antv/g6 业务场景:流程图

1、流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中&#xff0c;流程图主要用来说明某一过程。这种过程既可以是生产线上的工艺流程&#xff0c;也可以是完成一项任务必需的管理过程。业务场景流程图如下&#xff1a; 2、绘制流程图的 Tips 流程图一般是用…

计算机毕业设计选题推荐-果树生长信息管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Redis三种集群模式:主从模式、哨兵模式和Cluster模式

1. 总结经验 redis主从&#xff1a;可实现高并发(读)&#xff0c;典型部署方案&#xff1a;一主二从 redis哨兵&#xff1a;可实现高可用&#xff0c;典型部署方案&#xff1a;一主二从三哨兵 redis集群&#xff1a;可同时支持高可用(读与写)、高并发&#xff0c;典型部署方…

探索Python数据持久化的秘密:ZODB库的神奇之旅

文章目录 探索Python数据持久化的秘密&#xff1a;ZODB库的神奇之旅背景ZODB是什么&#xff1f;如何安装ZODB&#xff1f;简单库函数使用方法场景应用常见Bug及解决方案总结 探索Python数据持久化的秘密&#xff1a;ZODB库的神奇之旅 背景 在Python的广阔世界中&#xff0c;数…

基于单片机的水箱水质监测系统设计

本设计基于STM32F103C8T6为核心控制器设计了水质监测系统&#xff0c;选用DS18B20温度传感器对水箱水体温度进行采集&#xff1b;E-201-C PH传感器获取水体PH值&#xff1b;选用TS-300B浊度传感器检测水体浊度&#xff1b;采用YW01液位传感器获取水位&#xff0c;当检测水位低于…

网络压缩之知识蒸馏(knowledge distillation)

因为直接训练一个小的网络&#xff0c;往往结果就是没有从大的网络剪枝好。知识蒸馏的概念是 一样的&#xff0c;因为直接训练一个小的网络&#xff0c;没有小的网络根据大的网络来学习结果要来得 好。 因而&#xff0c;先训练一个 大的网络&#xff0c;这个大的网络在知识蒸馏…

Flutter 初识:Chip控件

Flutter Chip控件小结 Chip属性解析示例 InputChip属性解析示例 ChoiceChip属性解析示例 FilterChip属性解析示例 ActionChip属性解析示例 在 Flutter 中&#xff0c;Chip 是一种用于显示简洁信息的组件。它通常用来展示标签、属性、短的文本片段等&#xff0c;并可以包含可选的…

C语言推箱子迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h> typedef stru…

python内置模块datetime.date类详细介绍

Python的datetime模块是一个强大的日期和时间处理库&#xff0c;它提供了多个类来处理日期和时间。主要包括几个功能类datetime.date、datetime.time、datetime.datetime、datetime.timedelta,datetime.timezone等。 使用datetime模块 要使用 datetime模块&#xff0c;直接导…

大模型辅助软件开发,助力工程师的开发之路

大模型与软件工程师&#xff1a;改变开发范式的力量 “是人类工程师的能力&#xff0c;而不是大模型的能力&#xff0c;决定了大模型协作式开发的上限。” 这句话深刻地揭示了在人工智能&#xff0c;尤其是大型语言模型&#xff08;LLM&#xff09;飞速发展的今天&#xff0c…

《数字信号处理》学习02-序列的能量及周期性

目录 一&#xff0c;序列的能量 二&#xff0c;序列的周期性 一&#xff0c;序列的能量 序列能量在数字信号处理中的应用&#xff1a;能量归一化。在信号处理中&#xff0c;有时需要对信号进行归一化处理&#xff0c;使得信号的能量为特定的值&#xff0c;这在一些算法和系统…

无主灯吊顶的精致做法:打造光影艺术的居家空间

在现代家居设计中&#xff0c;无主灯吊顶以其独特的照明效果和空间层次感&#xff0c;逐渐成为追求高品质生活人群的首选。无主灯设计不仅能够有效避免传统主灯带来的刺眼感&#xff0c;还能通过多点光源的巧妙布局&#xff0c;营造出温馨、舒适的居家氛围。作为无主灯照明灯具…

洛谷 P3183 [HAOI2016]食物链(记忆化搜索/拓扑排序)

[HAOI2016]食物链 给定 n 个物种和 m 条能量流动关系&#xff0c;求其中的食物链条数。物种的名称从 1 到 n 编号&#xff0c; M 条能量流动关系形如 a1​→b1​,a2​→b2​,a3​→b3​⋯am−1​→bm−1​,am​→bm​ 其中 ai​→bi​ 表示能量从物种 ai​ 流向物种 bi​ ,注意…

【Linux 驱动】IMX6ULL interrupt驱动

1. GIC驱动初始化 start_kernel (init\main.c) init_IRQ (arch\arm\kernel\irq.c) irqchip_init (drivers\irqchip\irqchip.c) of_irq_init (drivers\of\irq.c) desc->irq_init_cb match->data; ret desc->irq_init_cb(des…

(已开源-CVPR 2024)YOLO-World: Real-Time Open-Vocabulary Object Detection

169期《YOLO-World Real-Time Open-Vocabulary Object Detection》 You Only Look Once (YOLO) 系列检测模型是目前最常用的检测模型之一。然而&#xff0c;它们通常是在预先定义好的目标类别上进行训练&#xff0c;很大程度上限制了它们在开放场景中的可用性。为了解决这一限制…

医学领域实现基于大模型和本地知识库的智能问答系统

在医学领域实现一个基于大模型和本地知识库的智能问答系统&#xff0c;需要考虑医学领域的专业知识和术语。我们将构建一个简单版本的系统&#xff0c;该系统能够处理医学问题&#xff0c;并且能够从本地知识库中检索相关信息来生成答案。 技术栈&#xff1a; 自然语言处理模型…

编译LineageOS模拟器镜像,导出到AndroidStudio

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 源码下载 LineageOS官网&#xff1a;https://lineageos.org/ LineageOS源码 github 地址&#xff1a;https://github.com/LineageOS/android LineageOS源码国…

讯鹏科技智慧公厕专业供应商,解读智慧公厕有哪些奥秘

在当今科技日新月异的时代&#xff0c;讯鹏科技作为智慧公厕专业供应商&#xff0c;以其先进的技术和创新的解决方案&#xff0c;为人们带来了全新的公共卫生体验。那么&#xff0c;智慧公厕究竟有哪些奥秘呢&#xff1f;让我们一同解读。 一、智慧公厕硬件 1. 环境监测传感器&…