乾坤大挪移~

  • 一、题目描述
  • 二、思路分析
    • 1、头插
    • 2、三指针迭代
  • 三、整体代码展示【需要自取】
    • 1、头插
    • 2、三指针迭代
  • 四、总结与提炼

一、题目描述

原题传送门
给你单链表的头节点 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、头插

  • 对于头插这一种方法,也就是将结点一一地插入到链表的头后,所以我们需要先去建立出一个新的链表头,也就是我下面的这个【rhead】,通过去遍历原先的链表将这些结点一一转移过去即可
  • 但是在一个结点转移后下一个结点就找不到了,于是我们需要先去保存下一个结点

  • 然后让【cur】的next去指向【rhead】,然后更新rhead和cur的值

  • 然后我们通过保存下一个结点继续去进行一个头插

  • 继续头插【2】结点,做结点指针的更新

  • 同理

  • 同上

  • 此时当【cur == NULL】时,便结束一个遍历,然后新链表的头就是【rhead】,返回即可

  • 可以看出,这其实并不算真正意义上的头插,对于头插法,大家最熟悉的应该是
newnode->next = head->next;
head->next = newnode;
  • 下面这种叫做带头结点的插入,我上面这种是不带头结点的,这个大家要做好区分
  • 代码在后面给出

2、三指针迭代

  • 然后我们再来讲一讲三指针的迭代方法,这种方法不需要在去创建一个新的头结点指针,只需要在原先的链表上进行一个操作即可,也就是定义三个指针,一个【cur】指向当前链表的头,一个【nextNode】指向cur的next,一样是用于保存,还有一个则是【prev】,这个的话其实是用来算作链表最后一个结点指向空的,初始化就像下面这样

  • 然后执行一个循环的逻辑,将【cur->next = prev】,让原本的头【cur】作为反转后新链表的尾巴,接着就是进行的一个迭代操作,首先将【cur】当前的值给到【prev】,然后将【nextNode】当前的值给到【cur】,然后让【nextNode】继续向下,这个时候其实就进行了一个迭代的操作

  • 然后继续做翻转,让【cur->next】指向prev

  • 同理

  • 可以看到,当这个【cur == NULL】时,整个链表便完成了一个翻转,此时便结束循环迭代的逻辑

  • 然后可以看到,此时新链表的头并不是【cur】,而是【prev】,所以最后应该返回【prev】
  • 代码一样在下一模块给出

三、整体代码展示【需要自取】

1、头插

这里展示一下整体代码,将上面我们的解说进行代码的一个转化

class Solution {public:ListNode* reverseList(ListNode* head) {ListNode* cur = head;ListNode* rhead = NULL;while(cur){ListNode* nextNode = cur->next;     //优先保存cur的next结点//头插cur->next = rhead;rhead = cur;cur = nextNode;}return rhead;}
};

2、三指针迭代

class Solution {public:ListNode* reverseList(ListNode* head) {if(head == NULL)return NULL;ListNode* prev = NULL;ListNode* cur = head;ListNode* nextNode = cur->next;while(cur){cur->next = prev;//迭代prev = cur;cur = nextNode;if(nextNode)nextNode = nextNode->next;}return prev;}
};

四、总结与提炼

  • 最后我们来总结一下本文所介绍的内容,本文讲解来一道力扣中有关链表翻转的题目,这道题目是校招笔试面试中有关链表章节非常高频的一道题目,大家下去一定要自己再画画图,分析一下,把这段代码逻辑自己实现一遍,才能更好地掌握

以上就是本文所要描述的所有内容,感谢您对本文的观看,如有疑问请于评论区留言或者私信我都可以

力扣206 - 反转链表【校招面试高频考题】相关推荐

  1. 力扣206.反转链表C++

    一.题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 提示: 链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000 解析: ...

  2. 力扣——206.反转链表

    题目 python代码 方法一:利用新列表,创建新的链表 # Definition for singly-linked list. # class ListNode(object): # def __ ...

  3. 力扣206反转链表:代码实现+图文全解+方法总结(四种方法)

    文章目录 第一部分:题目描述 第二部分:题解 2.1 方法一:生成新节点到新链表 2.2 方法二:复用旧节点到新链表

  4. 力扣206,反转链表(JavaScript)

    var reverseList = function(head) {let cur=headlet pre=nullwhile(cur!=null){//保存当前指针指向let temp=cur.ne ...

  5. 力扣LeetBook<链表>学习笔记

    文章目录 一.概述 二.单链表 1.设计单链表 三.双指针技巧 1. 环形链表 2.环形链表Ⅱ 3.相交链表 4.删除链表的倒数第N个节点 5.小结 四.经典问题 1.反转链表 2.移除链表元素 3. ...

  6. 【LeetCode题目详解】(二)206.反转链表、876.链表的中间结点

    目录 一.力扣第206题:反转链表 1.思路一 2.思路二 二.力扣第876题:链表的中间结点 1.思路一 2.思路二 总结 一.力扣第206题:反转链表 题目链接:206. 反转链表 - 力扣(Le ...

  7. LeetCode 206. 反转链表(Reverse Linked List) 16

    206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...

  8. LeetCode-链表-206. 反转链表

    描述 206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:h ...

  9. 双指针算法之快慢指针(一):力扣【判断链表是否有环】leetcode-141、142

    一.简介:什么是快慢指针? 快慢指针,顾名思义,无非就是设置一个快指针,一个慢指针,初始化的时候,快指针和慢指针都指向链表的头结点,前进的时候一个在前一个在后,结合起来可以十分巧妙的解决链表中的一些问 ...

最新文章

  1. 新手学stm32学f1还是f4,stm32初学者最好买哪种开发板?
  2. Zonbu-售价 99 美元的袖珍电脑
  3. 约翰诺曼超级计算机研究中心,第433章 拉泽尔松教授的决定
  4. python之道_一入python深似海--python之道
  5. 获取今天,昨天,本周,上周,本月,上月时间
  6. spring boot学习(5): 进程exit code自定义
  7. shell编程之awk
  8. Linux学习总结(28)——Linux主机加固
  9. 基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案
  10. 读大道至简——编程的精义感想
  11. 从零基础入门Tensorflow2.0 ----三、7.自定义损失函数
  12. 3ds Max 2012 简体中文版 带注册机32位64位
  13. 用word保存出高清的pdf文件
  14. SQL Server compute [by]
  15. HCIA-USG Security Policy
  16. Failed to compile with 1 errors
  17. 周红c语言答案,周红
  18. python123用户登录c_写代码: 实现用户输入用户名和密码,当用户名为seven且密码为123时,显示登录成功,否则登录失败。...
  19. itss认证条件是什么?
  20. 杨辉三角形【找规律】

热门文章

  1. 在局域网如何使用Git
  2. 隐私计算开源平台Rosetta部署分享
  3. Python每日练习 04 你有一个目录,装有很多图片,现在你要把它们的尺寸变成不都大于Iphone5分辨率的大小
  4. 洪荒开局鸿蒙绑定系统,洪荒开局绑定鸿钧
  5. 百度地图 api php thinkhp,TP5调用百度地图接口进行开发
  6. 20230218英语学习
  7. centos6如何安装和使用ntp来同步时间
  8. div结合css布局bbs首页
  9. python判断红绿灯
  10. 基于JavaSpringMVC+vue实现协同过滤电影推荐系统详细设计