力扣

技术力扣 力扣 - 剑指 Offer 24. 反转链表题目
剑指 Offer 24. 反转链表
思路1(迭代)使用一个指针pre指向上一个节点,初始值为null,然后遍历链表,一边遍历一遍交换指针指向:

强制按钮-剑指提供24。反转链表

题目

指剑要约24。反转链表

思路1(迭代)

使用指针pre指向前一个节点,初始值为空,然后遍历链表,同时遍历交换指针指向:

首先使用下一个节点到下一个节点。

然后将cur指向pre。

然后将pre指向cur。

最后,将cur指向nextNode可以完成两个节点的反转。

我们遍历整个链表,对所有节点都这样做,然后把整个链表倒过来。

代码

解决方案类{

公共列表节点反转列表(列表节点头){ 0

//当有多个元素时,确保链表是反转的。

if(head==null | | head . next==null){ 0

返回头;

}

//Common pre指针,存储前一个节点,指向null,因为需要保证第一个元素的下一个可以指向null

//反转过程如下:先存储当前节点的nextNode,然后将当前元素的next指向pre,最后将pre指向head,head指向nextNode。

ListNode pre=null

趁着(头!=null){ 0

ListNode nextNode=head.next

head.next=pre

pre=head

head=nextNode

}

//此时,head指向null,pre指向反转的head节点。

返回前置;

}

}

复杂度分析

时间复杂度:\ O(N)\)

空间复杂度:\ O(1)\)

思路2(递归)

递归比迭代稍微复杂一点。

第一步是递归链接列表。如果你遇到列表的末尾,你将结束递归。这时,你得到的末端节点是倒头节点,所以我们在每一层递归将这个节点传递返回.

当递归到达链表末尾时,我们从链表末尾修改指针:将当前节点下一个节点的下一个指针指向当前节点,即cur.next.next=cur,然后将当前节点cur的指针指向null(如果不指向null,反转后的最后一个节点就不会指向null,从而形成循环)。递归的每一层都是这样做的,最后链表可以反转。

注意:

返回值是最后一个节点。

同时,将cur的下一个指向null。

代码

解决方案类{

公共列表节点反转列表(列表节点头){ 0

//只有链表节点数大于1时,才需要反转。

if(head==null | | head . next==null){ 0

返回头;

}

//反转链接列表

返回dfs(负责人);

}

公共列表节点dfs(列表节点节点){ 0

//遍历到最后一个节点时开始返回。

if(node . next==null){ 0

返回节点;

}

//获取链表的最后一个节点,也是未来反转后的头节点。

list node last=DFS(node . next);

//修改链表指针的指向。

//将下一个节点的下一个指向当前节点

node . next . next=node;

//将当前节点指向空

//如果不设置为空,最后一个节点不能指向空,导致循环链表的存在。

node.next=null

最后返回;

}

}

复杂度分析

时间复杂度:\ O(N)\)

复杂性:\(O(N)\),递归所需的堆栈空间。

我走得很慢,但我从不后退!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/103400.html

(0)

相关推荐

  • 送老公什么生日礼物,老公生日送什么礼物合适

    技术送老公什么生日礼物,老公生日送什么礼物合适夫妻这一生送老公什么生日礼物,即便是能够轰轰烈烈,也不会持久,平淡是最后的绝唱,人生的意义,深深蕴含于平凡生活中,平平淡淡相伴才是真。而如何在平淡相伴着的每一天里,都能仍旧保

    生活 2021年10月27日
  • C语言怎样把浮点数转换为字符串

    技术C语言怎样把浮点数转换为字符串本篇文章为大家展示了C语言怎样把浮点数转换为字符串,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。把浮点数转换为字符串1、把float/doubl

    攻略 2021年12月13日
  • ps颜色模式,ps中怎么转换色彩模式

    技术ps颜色模式,ps中怎么转换色彩模式工具/原料电脑Adobe Photoshop CS6(64 Bit)方法/步骤1、首先打开PS,见下图展示ps颜色模式。2、打开PS后,点击菜单栏的文件,打开一张图片,见下图展示。

    生活 2021年10月23日
  • 怎么通过Java代码来理解RPC

    技术怎么通过Java代码来理解RPC本篇内容主要讲解“怎么通过Java代码来理解RPC”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么通过Java代码来理解RPC”吧!这整

    攻略 2021年11月15日
  • Oracle索引范围扫描操作流程是什么

    技术Oracle索引范围扫描操作流程是什么本篇内容主要讲解“Oracle索引范围扫描操作流程是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle索引范围扫描操作流

    攻略 2021年11月4日
  • 我国的少数民族,我国特有的少数民族有哪些

    技术我国的少数民族,我国特有的少数民族有哪些蒙古族那达慕大会;锡伯族抹黑节;彝族的“火把节”;瑶族达努节;藏族望果节。1、瑶族达努节达努节是马山、都安、巴马、平果、隆安、大化等地自称“布努”的瑶族传统节日。又名二九节、祖

    生活 2021年11月1日