Leetcode习题集-链表
这里记录一些我刷题的思路方便之后进行复习重温,同时也方便进行添加
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习题集-链表的更多相关文章
- Leetcode解题-链表(2.2.0)基础类
1 基类的作用 在开始练习LeetCode链表部分的习题之前,首先创建好一个Solution基类,其作用就是: Ø 规定好每个子Solution都要实现纯虚函数test做测试: Ø 提供了List ...
- LeetCode 单链表专题 (一)
目录 LeetCode 单链表专题 <c++> \([2]\) Add Two Numbers \([92]\) Reverse Linked List II \([86]\) Parti ...
- 【算法题 14 LeetCode 147 链表的插入排序】
算法题 14 LeetCode 147 链表的插入排序: 解题代码: # Definition for singly-linked list. # class ListNode(object): # ...
- 关于leetcode中链表中两数据相加的程序说明
* Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ ...
- LeetCode之“链表”:Reverse Linked List && Reverse Linked List II
1. Reverse Linked List 题目链接 题目要求: Reverse a singly linked list. Hint: A linked list can be reversed ...
- 关于LeetCode上链表题目的一些trick
最近在刷leetcode上关于链表的一些高频题,在写代码的过程中总结了链表的一些解题技巧和常见题型. 结点的删除 指定链表中的某个结点,将其从链表中删除. 由于在链表中删除某个结点需要找到该结点的前一 ...
- Leetcode中单链表题总结
以下是个人对所做过的LeetCode题中有关链表类型题的总结,博主小白啊,若有错误的地方,请留言指出,谢谢. 一.有关反转链表 反转链表是在单链表题中占很大的比例,有时候,会以各种形式出现在题中,是比 ...
- LeetCode之链表总结
链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度.作为一种常用的数据结构,链表内置在很多高级编程语言里面.既比数组复杂又比树简单,所以链表经常被面试官 ...
- leetcode 876. 链表的中间结点 签到
题目: 给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式: ...
- leetcode 反转链表部分节点
反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m = 2, ...
随机推荐
- c语言container_of 编译报错
求指针ptr所在的结构体实例的首地址, #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) #define co ...
- CoreText学习笔记
CoreText是Apple系统的文字渲染引擎. 我们先看一个字符的字形图,了解一下一个字形包含的部分: 它的坐标系为窗口的左下角为视图的原点(跟Mac系统一样的坐标系),而iOS系统的坐标系为窗口的 ...
- wget 多线程下载 mwget 工具安装
# for centos mini #yum -y install gcc-c++ intltool libssl-dev yum -y install gcc-c++ intltool openss ...
- 【36oj】 画圣诞树
原题 圣诞节要到了,不少商家在宣传板上绘制了圣诞树的图案,如图所示.一棵圣诞树由A和B两部分组成: A是由n(n≥)个呈三角形的字符矩阵构成的,每个字符矩阵由三个参数ai.bi.ci唯一确定.Ai表示 ...
- 算子groupByKey和reduceByKey的区别
groupByKey根据k对v进行分组,如果要实现wordCount,需要再使用一个聚合算子,例如mapValues reduceByKey有聚合功能,最重要的是在shuffle过程之前可以对分区内相 ...
- BIP查询框添加查询条件
// 搜索框添加查询条件 viewModel.on("afterMount", function (data) { let agentId = viewModel.getParam ...
- clickhouse不喜欢sql末尾分号
今天用python连clickhouse查数据,sql语句末尾加了分号,始终报错 Code: 62, e.displayText() = DB::Exception: Syntax error 删掉分 ...
- nop4.3 用户权限管理
权限管理涉及到5张表: //用户表 select * from Customer //角色表select * from CustomerRole //用户和角色对应关系select * from Cu ...
- Flutter statecontroller.update(MaterialState.disabled,false)无效
因为中间会调用 void initStatesController() { if (widget.statesController == null) { internalStatesControlle ...
- go-浅学设计模式随记
责任链模式 组成:由多个处理器及处理器处理标志串联组成 作用:常用于处理流水线事务,利用多个处理器对同一个对象进行处理,可以利用各处理器开关 场景:常见逻辑层处理逻辑:获取参数.fetch数据.逻辑处 ...