分门别类刷leetcode——链表
链表结构
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——链表相关推荐
- 分门别类刷leetcode——高级数据结构(字典树,前缀树,trie树,并查集,线段树)
目录 Trie树(字典树.前缀树)的基础知识 字典树的节点表示 字典树构造的例子 字典树的前序遍历 获取字典树中全部单词 字典树的整体功能 字典树的插入操作 字典树的搜索操作 字典树的前缀查询 字典树 ...
- 分门别类刷题总结列表 C++ 实现
目录 输入输出 leetcode 牛客网 算法训练营 SQL shell编程 零七八碎 买的课 真题 输入输出 1 牛客刷题输入输出总结 2 记录各个七七八八的输入 持续更新中 leetcode 1 ...
- 学长冷月带你怒刷LeetCode之反转链表
本文目录 前言 题目描述 冷月题解 总结一下 前言 链表的操作是数据结构中最基础的算法之一,反转列表也是一道经典的笔试题.很多公司的面试题库中都有这道题,有的公司明确题目要求不能使用额外的节点存储空间 ...
- leetcode刷题链表
leetcode刷题链表 反转链表Ⅱ 题目描述将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1).例如: 给出的链表为9 ...
- 【前端来刷LeetCode】两数之和与两数相加
大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...
- 为了OFFER,花了几个小时,刷下Leetcode链表算法题
@Author:Runsen @Date:2020/9/13 链表是我这辈子的痛啊,每次学到链表,就往往不会,就没有继续学下去.现在大四不能继续让这个链表阻碍我了.现在基本是重刷数据结构和算法,毕竟笔 ...
- vscode 上刷leetcode算法题(含配置)
为什么选择在vscode 上刷leetcode 减少leetcode网页提交次数 提高"提交通过率" 轻量级的,易于debug的IDE 语法高亮美观 方便跑多个测试用例 调试链表, ...
- 拿什么拯救你,我的面试之——从零打卡刷Leetcode(No.003)
写在前边: 小詹一直觉得自己编程能力不强,想在网上刷题,又怕不能坚持.不知道有木有和小伙伴和小詹一样想找个人一起刷题呢?欢迎和小詹一起定期刷leetcode,每周一周五更新一题,每一题都吃透,欢迎一题 ...
- java开发有必要刷leetcode吗_刷 leetcode 需要哪些基础?
首先要知道 基础的数据结构:数组.字符串.树.堆.栈.队列.哈希表 基础的算法: 枚举遍历, 二分查找,递归,回溯 明白基础的数据结构之后,我们可以发现 leetcode上已经做好了分类, 首先我们要 ...
- 面试官系列 - LeetCode链表知识点题型总结
文章目录 前言 知识点 什么是链表 类别 单向链表 循环链表 双向链表 双向循环链表 与数组的性能对比 优缺点 常用技巧 题型总结 基本操作 删除类 翻转类题型 合并链表 环形链表 拆分链表 排序链表 ...
最新文章
- [锋利JQ]-图片提示效果
- [图] DevOps:提速从研发到交付流程
- mysql数据库with ur_Python使用MySQL数据库(新)
- 使用keras为什么accuracy一直为0_TensorFlow 2.0+Keras 防坑指南
- 转载(面向对象设计的原则)
- Unity脚本中查找的几种方法优劣以及坑
- Cobalt Strike参数详解
- android10禁用华为桌面,华为禁用第三方桌面 简介办法
- Android源代码分析--Preference之自动通话录音
- HDMI 调试之输出RGB888
- 微信,该文件已过期或已被清理
- 基于PANDA做DTI分析
- opencv2读取摄像头并保存为视频
- Android——adapter解读
- 最新水利水电安全员考试多选练习题库
- 学生用计算机app,学生党利器!微软出品的这个小众APP,帮你搞定数学难题!
- matlab bvp4c猜测解,对具有两个解的 BVP 求解
- Unicode 与前端字符编码全揭秘
- 在一个数组中找到几个数之和为某个数字
- 中间件是什么,常用的中间件有哪些
热门文章
- DOTA数据集+YOLOV5
- Oriented R-CNN完整复现HRSC2016以及训练自己的HBB数据集(DIOR)
- 牛客每日练习----分元宵,送分啦-QAQ,字符串的问题
- android 画布画笔,安卓画笔笔锋的实现探索(一)
- 硬件模块应用之超声波测距模块SRF05应用
- c语言 -- 三位数的逆序
- 高清HDMI高清编码器(HDMI网络传输器)使用及前景
- 窥见数字未来“天机”,IBM正式发布2019十大行业洞察
- es管理器免root_真正免root的ES文件浏览器详细使用教程
- windows系统服务器怎么锁屏,使用Windows 8的十个小贴士:自定义锁屏