【C语言】Leetcode 206.反转链表

博主主页:17_Kevin-CSDN博客

收录专栏:《Leetcode》


题目

解决思路

思路一:翻转链表

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

我们定义三个节点的指针n1,n2,n3.分别指向NULL,head,head -> next。这样我们通过三个指针来临时存放各个节点,以此为基础来重新将各个节点进行链接。之后通过while循环使指针向后移动,逐一将n2位置的节点断开与n1之前的链接,再由n2指向n1进行链接。

过程如下图:

思路二:头插法

struct ListNode* reverseList(struct ListNode* head) 
{struct ListNode *cur = head;struct ListNode *newhead = NULL;while(cur){struct ListNode *next = cur -> next;cur -> next = newhead;newhead = cur;cur = next;}return newhead;}

首先我们定义了两个结构体指针,cur和newhead,用cur来指向当前的节点,从head开始;用newhead指向一个NULL,newhead将作为后面链接新链表的表头。

然后我们用while循环将链表遍历,直到cur的指向是NULL。在遍历的过程中,每一次cur指向的节点不是NULL的时候定义一个结构体指针next,该指针用来暂时保存cur的next,因为在连接的时候cur会先被用来去链接在新链表上,这样的话就没法找到之前链表中cur指向的下一个节点了,所以用next指向下一个节点来保证完成整体的链表的遍历。

在保证可以正常完成遍历后,我们就可以来实现每一层循环的逻辑了:

cur的next指向newhead实现了以下操作:

newhead指向cur实现了以下操作:

cur指向next实现了以下操作:

通过以上的逻辑,在一层层遍历后,直到cur对应的节点为空的时候也就表示原来的节点已经被全部链接到新的链表上了,完成了链表的反转。


以上就是该篇的全部内容啦~

如果我的博客对您的学习有帮助,希望可以得到您的三连~

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

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

相关文章

MySQL学习笔记(一)数据库事务隔离级别与多版本并发控制(MVCC)

一、数据库事务隔离级别 数据库事务的隔离级别有4种,由低到高分别为Read uncommitted (读未提交)、Read committed(读提交) 、Repeatable read(可重复读) 、Serializable (串行化&a…

【Git】项目源码迁移到另一个gitlab(保留原来提交历史记录)

目录 前情提要迁移方案IDEA远程仓库管理团队其他成员切换gitgit命令操作界面 前情提要 公司原来是自己私有部署的gitlab。有了研发云后就希望将代码推送到研发云的代码仓库上。这时候需要迁移并保留原来提交的历史记录。 迁移方案 登录新的gitlab(代码仓库)新建空白项目获取…

windows下的反调试探究——原理

原理 我们在前面介绍了一些反调试的手段,基本上都是通过对内核的某个标志进行修改来达到反调试的效果,但是这里有一个问题就是,如果分析人员对我们的样本的API进行了hook,那么我们的反调试手段都将作废,也就是说我们还…

【蓝牙协议栈】【BR/EDR】【AVDTP】音视频分布传输协议

1. AVDTP概念 AVDTP即 AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL(音视频分配传输协议),主要负责 A/V stream的协商、建立及传输程序,还指定了设备之前传输A/V stream的消息格式. AVDTP的传输机制和消息格式是以 RTP为基础的。RTP由 RTP Data Transfer Protocol (RTP)和…

网络进程:广播、组播、流式域、报式域(套接字)

1.广播 1.1广播发送端模型(类似UDP客户端) 程序代码&#xff1a; #include<myhead.h> int main(int argc, const char *argv[]) {//创建套接字int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}//将套接字设置成允许广播i…

Ubuntu 18.04(x86_64)安装配置 CUDA 11.6 + cuDNN v8.9.7 + TensorRT8.4.1.5(亲测可用)

1. 检查是否安装显卡驱动 lspci | grep -i nvidianvidia-smi 如果显示特定的界面&#xff0c;这表明显卡驱动已经被安装。若未安装驱动&#xff0c;则需通过手动方式进行安装。 首先&#xff0c;需要添加软件源&#xff1a; 执行以下命令以添加PPA源&#xff1a; sudo add-…

测试环境搭建整套大数据系统-问题篇(一:实时遇到的问题)

1. java.io.IOException: Failed to deserialize JSON ‘{“age”:867,“sex”:“fba8c074f9”,“t_insert_time”:“2024-03-04 14:12:24.821”}’ 解决方式 修改数据类型。将TIMESTAMP_LTZ改为TIMESTAMP。 2. java. lang,classNotFoundException: org,apache.flink,streami…

Docker镜像导出/导入

Docker镜像导出/导入 一、前言 在实际操作中&#xff0c;为了便于docker镜像环境和服务配置的迁移&#xff0c;我们有时需要将已在测试环境主机上完成一系列配置的docker镜像或运行中的容器镜像导出&#xff0c;并传输到生产或其他目标环境主机上运行。为此&#xff0c;本文主…

使用 gulp-cleanwxss 清除小程序无用样式代码

小程序在迭代中&#xff0c;因没有及时清理无用样式&#xff0c;造成包体积越来越大。而通过人工判断清除工作量大&#xff0c;因而使用 gulp-cleanwxss 实现脚本清除。 一、Demo 演示 二、实现步骤 1、全局安装 gulp 命令行工具 yarn global add gulp-cli2、局部安装依赖 gu…

尚硅谷Java数据结构--线索化二叉树

出现空指针异常&#xff08;先记录一下&#xff09; &#xff08;希望大佬能够指出是哪里出了问题&#xff09; package DataStructure;/*** Created with IntelliJ IDEA.* Description:* User: 86178* Date: 2024-03-05* Time: 10:39*/ public class ThreadedBinaryTreeDemo …

蓝桥杯-单片机组基础7-存储器映射扩展与PWM脉冲调制(附小蜜蜂课程代码)

蓝桥杯单片机组备赛指南请查看这篇文章&#xff1a;戳此跳转蓝桥杯备赛指南文章 本文章针对蓝桥杯-单片机组比赛开发板所写&#xff0c;代码可直接在比赛开发板上使用。 型号&#xff1a;国信天长4T开发板&#xff08;绿板&#xff09;&#xff0c;芯片&#xff1a;IAP15F2K6…

备战蓝桥杯---图论应用1

目录 1.增加虚点建图&#xff1a; 2.抽象图的迪杰斯特拉&#xff1a; 3.用bitset优化弗洛伊德&#xff1a; 4.有向图的Prim/kruskal&#xff1a; 1.增加虚点建图&#xff1a; 我们当然可以每一层与上一层的点再连上一条边&#xff0c;但这样子边太多了超内存&#xff0c;我们…