这里记录一些我刷题的思路方便之后进行复习重温,同时也方便进行添加

P141-环形链表

class Solution {
public:
bool hasCycle(ListNode *head) {
if(!head) return false;
if(!head->next) return false;
ListNode* last = reverse(head);
return last==head;
} ListNode* reverse(ListNode* head){
ListNode *pre=NULL,*curr=head;
while(curr){
ListNode* next = curr->next;
curr->next=pre;
pre=curr;
curr=next;
}
return pre;
}
};

使用翻转链表,判断返回的指针与传进的指针是否相同,时间复杂度是O(N)(?可能),空间复杂度是O(1).

class Solution {
public:
bool hasCycle(ListNode *head) {
if(!head||!head->next) return false;
ListNode *fast=head->next,*slow=head;
while(fast!=slow){
if(!fast||!fast->next) return false;
fast=fast->next->next;
slow=slow->next;
}
return true;
}
};

使用快慢指针Floyd 判圈算法,如果有环则兔子会与龟碰上,但没有环则会到NULL,这里有一个小知识点就是!fast||!fast->next这个条件需要先判断fast是否为空,顺序不能翻转否则可能进入死循环,因为判断的顺序从左到右。

p19-删除链表的倒数第N个节点

class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
head=reverse(head);
int i=1;
ListNode* ptr=head;
if(i==n) return reverse(head->next);
i++;
while(ptr&&ptr->next){
if(i==n){
ptr->next=ptr->next->next;
break;
}
ptr=ptr->next;
i++;
}
return reverse(head);
} ListNode* reverse(ListNode* head){
ListNode* pre=NULL,*curr=head;
while(curr){
ListNode* next = curr->next;
curr->next=pre;
pre=curr;
curr=next;
}
return pre;
}
};

两次翻转。

class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *slow=head, *fast=head;
while(n){
fast=fast->next;
n--;
}
if(!fast) return head->next;
while(fast->next){
fast=fast->next;
slow=slow->next;
}
slow->next=slow->next->next;
return head;
}
};

快慢指针,将最后一段的间隔设定好,即快指针先跑结尾长度,然后双指针齐头并进。

Leetcode习题集-链表的更多相关文章

  1. Leetcode解题-链表(2.2.0)基础类

    1 基类的作用 在开始练习LeetCode链表部分的习题之前,首先创建好一个Solution基类,其作用就是: Ø  规定好每个子Solution都要实现纯虚函数test做测试: Ø  提供了List ...

  2. LeetCode 单链表专题 (一)

    目录 LeetCode 单链表专题 <c++> \([2]\) Add Two Numbers \([92]\) Reverse Linked List II \([86]\) Parti ...

  3. 【算法题 14 LeetCode 147 链表的插入排序】

    算法题 14 LeetCode 147 链表的插入排序: 解题代码: # Definition for singly-linked list. # class ListNode(object): # ...

  4. 关于leetcode中链表中两数据相加的程序说明

    * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ ...

  5. LeetCode之“链表”:Reverse Linked List && Reverse Linked List II

    1. Reverse Linked List 题目链接 题目要求: Reverse a singly linked list. Hint: A linked list can be reversed ...

  6. 关于LeetCode上链表题目的一些trick

    最近在刷leetcode上关于链表的一些高频题,在写代码的过程中总结了链表的一些解题技巧和常见题型. 结点的删除 指定链表中的某个结点,将其从链表中删除. 由于在链表中删除某个结点需要找到该结点的前一 ...

  7. Leetcode中单链表题总结

    以下是个人对所做过的LeetCode题中有关链表类型题的总结,博主小白啊,若有错误的地方,请留言指出,谢谢. 一.有关反转链表 反转链表是在单链表题中占很大的比例,有时候,会以各种形式出现在题中,是比 ...

  8. LeetCode之链表总结

    链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度.作为一种常用的数据结构,链表内置在很多高级编程语言里面.既比数组复杂又比树简单,所以链表经常被面试官 ...

  9. leetcode 876. 链表的中间结点 签到

    题目: 给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式: ...

  10. leetcode 反转链表部分节点

    反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m = 2, ...

随机推荐

  1. flutter 常用ui库

    1,EasyRefresh实现listview上拉刷新下拉加载,添加头尾布局,以及加载样式 地址:https://pub.flutter-io.cn/packages/flutter_easyrefr ...

  2. pytest(5)-自定义用例顺序(pytest-ordering)-后续学习

    前言 测试用例在设计的时候,我们一般要求不要有先后顺序,用例是可以打乱了执行的,这样才能达到测试的效果. 有些同学在写用例的时候,用例写了先后顺序, 有先后顺序后,后面还会有新的问题(如:上个用例返回 ...

  3. dcloud打包安卓隐私政策上架问题!

    友情链接: https://ask.dcloud.net.cn/article/36937 两种方式: 方式1. 使用dcloud的方式,在打包文件中配置 隐私json文件,使用dclould封装的隐 ...

  4. Docker CLI docker run 常用命令

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化.Docker是内核 ...

  5. py正则与re模块

    正则表达式符号介绍 按照博客中的表格罗列的去记即可 了解 \w,\s,\d与\W,\S,\D相反的匹配关系(对应的两者结合就是匹配全局) \t匹配制表符 \b匹配结尾的指定单词 优先掌握 ^:以什么什 ...

  6. facade是如何产生的 in laravel

    据说Facade是为了简化写法, 好记,也有人说要废除这个特性, 据说这个特性有很好的的testability 测试性, 我不清楚, 这个是怎么说出来的理由是什么? 很多Facade 是系统写好的, ...

  7. tensorboard 2.0可视化 —浏览器中输入http://ip:6006 - 无法访问此网站——有效解决

    https://blog.csdn.net/sinat_28442665/article/details/108975276

  8. https原理(四)双向实践(java客户端+tcp代理)

    本文采用客户端与服务端共用一个密钥对 1 将https代理服务器(三)实践中的mkcert p12分解为一个公钥一个私钥 mac@macdeMacBook mkcert % openssl pkcs1 ...

  9. https原理(三)双向实践(curl)

    接 https代理服务器(三)实践,实践双向ssl 本文采用客户端与服务端不同密钥对 1 mkcert myclient 生成客户端公钥 私钥 2 mkcert -pkcs12 myclient 也可 ...

  10. matplotlib 中文乱码的解决方法

    关于报错信息 Glyph 26426 missing from current font. 这个错误的原因是:本地没有可支持中文字体显示的配置文件,所以第一步需要先去下载相关的配置文件. 下载链接 h ...