美文网首页
01-链表原地翻转

01-链表原地翻转

作者: 6ed2651eb5b0 | 来源:发表于2019-01-05 17:02 被阅读17次

题目

  1. 翻转一个链表。
    给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null
    要求原地翻转。
  2. 翻转链表中第m个节点到第n个节点的部分。m,n满足1 ≤ m ≤ n ≤ 链表长度。
    要求在原地一次翻转完成

链表知识回顾

  1. 链表定义
  • n个节点离散分布
  • 彼此通过指针相连
  • 每个节点只有一个前驱节点,每个节点只有一个后续节点
  • 首节点没有前驱节点,尾节点没有后续节点
  1. 相关术语
  • 首节点:第一个有效节点
  • 尾节点: 最后一个有效节点
  • 头结点:头结点的数据类型和其余结点一样;第一个有效节点之前的那个节点;头节点并不存放有效数据;加头结点的目的是为了方便对链表的操作(待体会)
  • 头指针: 指向头结点的指针变量
  • 尾指针: 指向尾节点的指针变量
    确定一个链表只需要一个参数:头指针即可
  1. 链表分类
  • 单链表
  • 双链表 每个节点有两个指针域
  • 循环链表 能通过任何一个节点找到找到其他任何节点
  • 非循环链表
  • 带环的链表

解题思路

  1. 题目1:原地一次翻转完成,意味着不能开辟额外的空间,意味着只能改变每个节点next指针的指向,即把每个节点的next指针指向其前一个节点。
    在改变节点next指针前,需先保留下next指针的值,保证在改变其next指针后仍旧可以找到其原始next值。

  2. 题目2

  • 指定翻转的范围按照原地翻转链表的代码就行
  • 需要记录开始翻转前的节点,开始翻转的第一个节点,及最后一个节点,用于最后链表的组装。比如1,2,3,4,5,翻转2到4,则需要记录1,2,4。在翻转完成之后,需要将1(prev)指向4(last),2(first)指向5。

参考代码

参考代码使用C++书写,来自九章算法,并且此链表中没有头结点,即链表的第一个节点就是有效节点

  1. 题目1


    Snip20190105_20.png
  2. 题目2


    Snip20190105_21.png

相关文章

  • 01-链表原地翻转

    题目 翻转一个链表。给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null要求原地翻...

  • c语言链表操作

    链表的创建 链表原地翻转 链表结点删除 头插法添加结点 修改链表某个结点的值 相当于查找元素,修改其关联元素的值 ...

  • iOS面试常考算法(持续更新)

    1.字符串翻转 reservString具体实现如下 2.链表原地翻转 3.合并有序数组,尽可能快 4.查找一个字...

  • 翻转链表

    翻转链表 描述翻转一个链表 样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->nul...

  • 25. K 个一组翻转链表

    K个一组反转链表 翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它...

  • 链表翻转

    给定单向链表,返回翻转后的链表

  • 链表

    1.翻转链表链表的定义 翻转 快慢指针找链表 的中间位置 3.有序链表的合并 4.判断链表中是否有环解法1: 借助...

  • Swift - LeetCode - 翻转链表

    题目 翻转链表 问题: 翻转链表中第m个节点到第n个节点的部分 说明: m,n满足1 ≤ m ≤ n ≤ 链表长度...

  • K 个一组翻转链表(递归,Kotlin)

    25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它...

  • leetcode第九十二题—反转链表 II

    又是一道升级题,还记得原来的翻转链表嘛,这个是要求指定m和n翻转链表。或许你忘了链表翻转怎么做,我编一个口诀:要问...

网友评论

      本文标题:01-链表原地翻转

      本文链接:https://www.haomeiwen.com/subject/hjqdrqtx.html