力扣力扣力:206. 反转链表

ops/2024/10/18 13:42:03/

leetcode链接:206. 反转链表

题目描述:

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

 

示例 1:

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

示例 2:

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

示例 3:

输入:head = []
输出:[]

 

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

 

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

分析思路:

第一反应是分类讨论

1.如果是空则直接返回

2.如果只有一个也直接返回

3.大于等于2个元素则进行反转

        1)可以new一个链表来倒着存值

        2)在原链表上进行操作

  实现1

在原链表上进行修改:
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {if(head == nullptr){return head;}else{ListNode* cur = head;ListNode* prev = nullptr;while(cur){   ListNode* nextnode = cur->next;cur->next = prev;prev = cur;cur = nextnode;}return prev;}}
};

实现2:在原链表上操作

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {if (head == nullptr) {return head;}ListNode* prev = nullptr; // 先初始化为 nullptrListNode* cur = head;while (cur != nullptr) {ListNode* front = cur->next; // 保存下一个节点cur->next = prev; // 反转当前节点的指向prev = cur; // 移动 prevcur = front; // 移动到下一个节点}return prev; // prev 现在是新的头节点}
};

需要注意的是,这里有个常见错误,下面我在写这道题的时候就已经犯了,不能在循环外先定义front,这是因为会存在一种情况只有一个结点,这时我这种写法就已经错了造成空指针问题了。

实现3:递归

这里引用一篇题解的动图来说明递归的实现过程下面是原文链接
:206. 反转链表 - 力扣(LeetCode)

这里举一个官方题解下的评论来具体来说明一下调用过程:

 第一轮出栈,head5head.next为空,返回5
 第二轮出栈,head4head.next为5,执行head.next.next=head也就是5.next=4
                      把当前节点的子节点的子节点指向当前节点
                      此时链表
1->2->3->4<->5,由于45互相指向,所以此处要断开4.next=null
                      此时链表1->2->3->4<-5
                      返回节点5
 第三轮出栈,head3head.next为4,执行head.next.next=head也就是4.next=3
                      此时链表
1->2->3<->4<-5,由于34互相指向,所以此处要断开3.next=null
                      此时链表1->2->3<-4<-5
                      返回节点5
 第四轮出栈,head2head.next为3,执行head.next.next=head也就是3.next=2
                      此时链表
1->2<->3<-4<-5,由于23互相指向,所以此处要断开2.next=null
                      此时链表1->2<-3<-4<-5
                      返回节点5
 第五轮出栈,head1head.next为2,执行head.next.next=head也就是2.next=1
                      此时链表
1<->2<-3<-4<-5,由于12互相指向,所以此处要断开1.next=null
                      此时链表1<-2<-3<-4<-5
                      返回节点5

出栈完成,最终头节点5->4->3->2->1


http://www.ppmy.cn/ops/126488.html

相关文章

搭建你的第一个Spring Cloud Alibaba微服务

搭建你的第一个Spring Cloud Alibaba微服务 Spring Cloud Alibaba是Spring Cloud生态中的一员&#xff0c;提供了许多高效的工具来支持微服务架构下的分布式系统&#xff0c;比如服务注册与发现、配置中心、熔断器、消息驱动等。本文将带你一步步搭建一个简单的Spring Cloud A…

从0开始深度学习(12)——多层感知机的逐步实现

依然以Fashion-MNIST图像分类数据集为例&#xff0c;手动实现多层感知机和激活函数的编写&#xff0c;大部分代码均在从0开始深度学习&#xff08;9&#xff09;——softmax回归的逐步实现中实现过 1 读取数据 import torch from torchvision import transforms import torchv…

【可答疑】基于51单片机的智能衣柜(含仿真、代码、报告、演示视频等)

✨哈喽大家好&#xff0c;这里是每天一杯冰美式oh&#xff0c;985电子本硕&#xff0c;大厂嵌入式在职0.3年&#xff0c;业余时间做做单片机小项目&#xff0c;有需要也可以提供就业指导&#xff08;免费&#xff09;~ &#x1f431;‍&#x1f409;这是51单片机毕业设计100篇…

002_基于django国内运动男装小红书文章数据可视化分析系统的设计与实现2024_qo6cy3i4

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

简单跟一个healessui的使用

简单跟一个healessui的使用 快速创建一个vue3项目 npm create vitelatest my-app-vue -- --template vue cd my-app-vue npm install npm run dev 安装headlessui/vue npm install headlessui/vue 抄写一个headlessui的组件样式listbox <template><Listbox v-mo…

PHP-laravel框架

laravel框架 laravel 搭建与路由基础 基本路由与视图路由 视图使用控制器模板分配变量

kubernetes(k8s)面试之2024

1、什么是k8s&#xff1f; K8s是kubernetes的简称&#xff0c;其本质是一个开源的容器编排系统&#xff0c;主要用于管理容器化的应用&#xff0c; 简单点就是k8s是一个编排容器的系统&#xff0c;一个可以管理容器应用全生命周期的工具&#xff0c;从创建应用&#xff0c;应用…

JAVA地狱级笑话

为什么Java开发者总是不怕黑暗&#xff1f; 因为他们总是有null指针来照亮路。 Java程序员最讨厌的音乐是什么&#xff1f; Garbage Collection旋律&#xff0c;节奏总是让他们烦躁。 为什么Java中的HashMap很擅长社交&#xff1f; 因为它总是能快速找到key对应的朋友。 Java开…