首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

反转单向链表

单向链表反转是一个非常常见的链表类面试题,我在刷leetcode的过程中,发现了有许多链表题目的解法,都是以反转链表为基础进行的。所以我觉得有必要记录一下。 首先先用一张图来理解单链表反转。 ?...image 单链表反转,就如上图一样,而单链表反转也有几种方式,今天我主要是想记录我用得最频繁的迭代的方式。...} } 这就是最基础的一个链表节点,而反转链表的代码,其实非常的短,关键点就在于理解这几行代码究竟让链表产生了什么变化。...所以总结一下单链表反转: 保存当前头结点的下个节点。 将当前头结点的下一个节点指向“上一个节点”,这一步是实现了反转。 将当前头结点设置为“上一个节点”。 将保存的下一个节点设置为头结点。...这样说起来确实有点拗口,但是我推荐大家在做链表类题目和理解链表的具体行为时,用一张纸和笔来辅助自己写写画画,相信很快你就会弄懂链表的具体思路的。

66110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    算法:反转单向链表(图解)

    ,如何反转一个单向链表 LeetCode #206 也是很热门的一道编程题 LC#206 Reverse Linked List ,题目描述如下: ?...vJapet 解题理论: 想要反转一个单向链表,除了当前的 head 指针外,我们还另外需要两个辅助指针: preNode 用于保存上一个引用的指针 nextNode 用于保存下一个引用的指针 不管你使用什么编程语言...,反转链表的公式都是一样的,主要分为以下四步: 将当前 head 引用的 next 引用传递给 nextNode 将当前 preNode 引用赋值给 head.next 实现反转(重要) 移动 preNode...指针,准备进行下一次反转 移动 head 指针,准备进行下一次反转 图解数据结构 上面代码和文字描述看上去可能不太直观,我们下面通过图文的形式展示一个单向链表是如何被反转单向链表的初始状态: ?...step 2 这里可以看到 head 引用的 next 指向已经发生的反转变化 ,这一步也是反转链表最重要的一步 后面第三步,第四步就是移动 preNode,head 指针,准备为下一次元素反转做准备了

    48720

    单向链表的花式玩法 → 还在玩反转

    数据结构   关于什么是链表,本文不做过多介绍,不了解的小伙伴自行去充能   稍微带大家回顾下链表的分类,不做过多介绍,直接看图   单链表   双向链表   循环链表     单向循环链表     ...双向循环链表   环形链表     由单链表 + 单向循环链表组成 花式玩法   后续的场景都会基于某些特定类型的链表,大家不要太放飞自我   我也会在各个场景中明确指明基于那个类型,大家不要看偏了...  单向节点 OneWayNode   虽然代码用 java 实现,但涉及到的算法实现是通用的,希望大家不要被开发语言所禁锢   链表反转   基本上指的是单链表反转,大家就认为是单链表反转...,它不适用于单链表   那么如何判断单链表的回文了   那就按回文的描述那样,对原链表进行拷贝,然后反转拷贝的链表,再将原链表与新链表的值逐一对应比较,过程类似如下   代码如下   有个数据结构,...,那有没有额外空间复杂度为 O(1) 的方式了   有,同样用快慢指针,只是快指针走完后,慢指针以及它之后的链表元素不是入栈,而是反转,将反转后的链表与原链表逐一对应比较,如下图所示   代码实现

    63820

    C 单向链表排序_单向链表排序java

    链表排序 链表排序的两种方式 一、交换结点的数据域 二、断开链表,重新形成 方法 示例 链表排序的两种方式 一、交换结点的数据域 有很多种方法,比如冒泡排序,选择排序等其他排序方法...,重新形成 方法 跟三指针法反转链表类似,也是要定义三个结构体指针。...第一步: 第一个指针用于找最小值 第二个指针用于指向最小值的前一个结点 第三个指针用于遍历链表 第二步: 让最小值从链表当中脱离出来 第三步: 然后再定义一个新的指针,用头插法把指向最小值的指针...形成新的链表,通过调整新链表结点的插入方法和在原链表找最值得到升序或降序的效果。...) //结点数据域比较 { pMin_prev = p; //标记 pMin = p->next; } p = p->next; } //2、将最值结点脱离出原链表 if(pMin == head)

    64340

    单向链表

    在做缓存设计的时候,可以用到链表的数据结构来做缓存设计。主体结构采用map,而存储的节点、数据采用双向链表。这里介绍单向链表,因为如果搞懂了单向链表,其实双向链表更好理解。...数据结构中的链表分为单向链表、双向链表、循环链表。...单向链表的数据结构中通常会存在数据域和节点域: 如图1:单向链表的数据结构 public class LinkNode{ int value; // 数据域 LinkNode next; //...双向链表:存在前驱节点和后继节点,基于前驱和后继节点可以很方便的表示节点元素间的关系。可以看到与单向链表不同的是存在的节点有前驱节点,同时是双向的。 ?...LeetCode206题:单向链表反转(如:(1->2->3->4)反转成(4->3->2->1) ?

    47420

    单向链表漫谈

    相爱相杀好基友——数组与链表 作为线性表的两种存储方式 —— 链表和数组,这对相爱相杀的好基友有着各自的优缺点。接下来,我们梳理一下这两种方式。...链表,由若干个结点组成,每个结点包含数据域和指针域。结点结构如下图所示: 一般来讲,链表中只会有一个结点的指针域为空,该结点为尾结点,其他结点的指针域都会存储一个结点的内存地址。...链表中也只会有一个结点的内存地址没有存储在其他结点的指针域,该结点称为头结点。 链表的存储方式使得它可以高效的在指定位置插入与删除,时间复杂度均为 O(1)。...设链表有 n 个元素,那么最多移动 n/2 轮。...根据上述表述得出,如果一个链表存在环,那么快慢指针必然会相遇。

    42500
    领券