链表结构

struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};

leetcode  206 单链表反转——(考察指针)

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

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

思路:

迭代

设置两个指针(new_head和next),new_head始终使其指向新链表的头结点,next始终使其指向待反转链表的头结点。

步骤图示如下(渣绘)

代码如下:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {if((head==nullptr)||(head->next==nullptr))return head;ListNode * new_head=nullptr,*next=nullptr;while(head){//next指向待排序链表的头结点next=head->next;//令被拆下来的节点的next指针指向新链表的头结点head->next=new_head;//移动new_head,使其保持指向新链表的头结点new_head=head;//使head指向待排序链表的头结点head=next;}return new_head;}
};

递归

递归着将链表层层拆解,等遇到尾节点时,将其设置为链表的头结点,之后层层从递归中返回,将之前记录的节点设置为当前链表的尾节点。类似下图(渣绘,求原谅):

代码如下:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* helper(ListNode*  head){ListNode*  current_head=nullptr;ListNode*  head_next=nullptr;if ((head == NULL)||(head->next == NULL)){return head;}else{//记下当前的头结点a0current_head = head;//记下当前头结点后面的结点a1head_next = head->next;//返回(a1...an)逆转后的头结点head = helper(head_next);//用上面保存的地址(逆转后的尾结点)指向原来的头结点a0head_next->next = current_head;//将a0的next域置零current_head->next = NULL;}//返回a0return head;
}ListNode* reverseList(ListNode* head) {if((head==nullptr)||(head->next==nullptr))return head;ListNode * tail=nullptr;tail=helper(head);return tail;}
};

分门别类刷leetcode——链表相关推荐

  1. 分门别类刷leetcode——高级数据结构(字典树,前缀树,trie树,并查集,线段树)

    目录 Trie树(字典树.前缀树)的基础知识 字典树的节点表示 字典树构造的例子 字典树的前序遍历 获取字典树中全部单词 字典树的整体功能 字典树的插入操作 字典树的搜索操作 字典树的前缀查询 字典树 ...

  2. 分门别类刷题总结列表 C++ 实现

     目录 输入输出 leetcode 牛客网 算法训练营 SQL shell编程 零七八碎 买的课 真题 输入输出 1 牛客刷题输入输出总结 2 记录各个七七八八的输入 持续更新中 leetcode 1 ...

  3. 学长冷月带你怒刷LeetCode之反转链表

    本文目录 前言 题目描述 冷月题解 总结一下 前言 链表的操作是数据结构中最基础的算法之一,反转列表也是一道经典的笔试题.很多公司的面试题库中都有这道题,有的公司明确题目要求不能使用额外的节点存储空间 ...

  4. leetcode刷题链表

    leetcode刷题链表 反转链表Ⅱ 题目描述将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1).例如: 给出的链表为9 ...

  5. 【前端来刷LeetCode】两数之和与两数相加

    大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...

  6. 为了OFFER,花了几个小时,刷下Leetcode链表算法题

    @Author:Runsen @Date:2020/9/13 链表是我这辈子的痛啊,每次学到链表,就往往不会,就没有继续学下去.现在大四不能继续让这个链表阻碍我了.现在基本是重刷数据结构和算法,毕竟笔 ...

  7. vscode 上刷leetcode算法题(含配置)

    为什么选择在vscode 上刷leetcode 减少leetcode网页提交次数 提高"提交通过率" 轻量级的,易于debug的IDE 语法高亮美观 方便跑多个测试用例 调试链表, ...

  8. 拿什么拯救你,我的面试之——从零打卡刷Leetcode(No.003)

    写在前边: 小詹一直觉得自己编程能力不强,想在网上刷题,又怕不能坚持.不知道有木有和小伙伴和小詹一样想找个人一起刷题呢?欢迎和小詹一起定期刷leetcode,每周一周五更新一题,每一题都吃透,欢迎一题 ...

  9. java开发有必要刷leetcode吗_刷 leetcode 需要哪些基础?

    首先要知道 基础的数据结构:数组.字符串.树.堆.栈.队列.哈希表 基础的算法: 枚举遍历, 二分查找,递归,回溯 明白基础的数据结构之后,我们可以发现 leetcode上已经做好了分类, 首先我们要 ...

  10. 面试官系列 - LeetCode链表知识点题型总结

    文章目录 前言 知识点 什么是链表 类别 单向链表 循环链表 双向链表 双向循环链表 与数组的性能对比 优缺点 常用技巧 题型总结 基本操作 删除类 翻转类题型 合并链表 环形链表 拆分链表 排序链表 ...

最新文章

  1. [锋利JQ]-图片提示效果
  2. [图] DevOps:提速从研发到交付流程
  3. mysql数据库with ur_Python使用MySQL数据库(新)
  4. 使用keras为什么accuracy一直为0_TensorFlow 2.0+Keras 防坑指南
  5. 转载(面向对象设计的原则)
  6. Unity脚本中查找的几种方法优劣以及坑
  7. Cobalt Strike参数详解
  8. android10禁用华为桌面,华为禁用第三方桌面 简介办法
  9. Android源代码分析--Preference之自动通话录音
  10. HDMI 调试之输出RGB888
  11. 微信,该文件已过期或已被清理
  12. 基于PANDA做DTI分析
  13. opencv2读取摄像头并保存为视频
  14. Android——adapter解读
  15. 最新水利水电安全员考试多选练习题库
  16. 学生用计算机app,学生党利器!微软出品的这个小众APP,帮你搞定数学难题!
  17. matlab bvp4c猜测解,对具有两个解的 BVP 求解
  18. Unicode 与前端字符编码全揭秘
  19. 在一个数组中找到几个数之和为某个数字
  20. 中间件是什么,常用的中间件有哪些

热门文章

  1. DOTA数据集+YOLOV5
  2. Oriented R-CNN完整复现HRSC2016以及训练自己的HBB数据集(DIOR)
  3. 牛客每日练习----分元宵,送分啦-QAQ,字符串的问题
  4. android 画布画笔,安卓画笔笔锋的实现探索(一)
  5. 硬件模块应用之超声波测距模块SRF05应用
  6. c语言 -- 三位数的逆序
  7. 高清HDMI高清编码器(HDMI网络传输器)使用及前景
  8. 窥见数字未来“天机”,IBM正式发布2019十大行业洞察
  9. es管理器免root_真正免root的ES文件浏览器详细使用教程
  10. windows系统服务器怎么锁屏,使用Windows 8的十个小贴士:自定义锁屏