代码随想录leetcode200题之链表

目录

  • 1 介绍
  • 2 训练
  • 3 参考

1 介绍

本博客用来记录代码随想录leetcode200题中链表部分的题目。

2 训练

题目1:203移除链表元素

C++代码如下,

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeElements(ListNode* head, int val) {ListNode* p = new ListNode(0, head);ListNode* res = p;while (p->next != nullptr) {if (p->next->val == val) p->next = p->next->next;else p = p->next;}return res->next;}
};

python3代码如下,

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:p = ListNode(0, head)res = pwhile p.next is not None:if p.next.val == val:p.next = p.next.next else:p = p.next return res.next

题目2:707设计链表

C++代码如下,

// struct ListNode {
//     int val;
//     ListNode* next;
//     ListNode() : val(0), next(nullptr) {}
//     ListNode(int x) : val(x), next(nullptr) {}
//     ListNode(int x, ListNode* nx) : val(x), next(nx) {}
// };class MyLinkedList {
private:ListNode* head; //head无实际含义public:MyLinkedList() {head = new ListNode(0);}int get(int index) {//时间复杂度O(N)int i = 0;ListNode* p = head->next;while (p != nullptr) {if (i == index) return p->val;p = p->next;i += 1;}return -1;}void addAtHead(int val) {//时间复杂度O(1)ListNode* p = new ListNode(val, head->next);head->next = p; }void addAtTail(int val) {//时间复杂度O(N)ListNode* p = head;while (p->next != nullptr) p = p->next;ListNode* t = new ListNode(val);p->next = t;}void addAtIndex(int index, int val) {//时间复杂度O(N)ListNode* p = head; //p从头结点开始算int i = 0;while (p != nullptr && i < index) {p = p->next;i += 1;}if (p == nullptr) return;ListNode* t = new ListNode(val, p->next);p->next = t;}void deleteAtIndex(int index) {//时间复杂度为O(N)ListNode* p = head; //p从头结点开始算int i = 0;while (p != nullptr && i < index) {p = p->next;i += 1;}if (p == nullptr || p->next == nullptr) return;p->next = p->next->next;}
};/*** Your MyLinkedList object will be instantiated and called as such:* MyLinkedList* obj = new MyLinkedList();* int param_1 = obj->get(index);* obj->addAtHead(val);* obj->addAtTail(val);* obj->addAtIndex(index,val);* obj->deleteAtIndex(index);*/

python3代码如下,

class MyLinkedList:def __init__(self):self.head = ListNode(0)def get(self, index: int) -> int:#时间复杂度为O(N)i = 0p = self.head.next while p is not None:if i == index:return p.val p = p.next i += 1return -1def addAtHead(self, val: int) -> None:#时间复杂度为O(1)p = ListNode(val, self.head.next)self.head.next = pdef addAtTail(self, val: int) -> None:#时间复杂度为O(N)p = self.head while p.next is not None:p = p.next t = ListNode(val)p.next = t def addAtIndex(self, index: int, val: int) -> None:#时间复杂为O(N)p = self.head i = 0while p is not None and i < index:p = p.next i += 1if p is None:return t = ListNode(val, p.next)p.next = t def deleteAtIndex(self, index: int) -> None:#时间复杂度为O(N)p = self.head i = 0while p is not None and i < index:p = p.next i += 1if p is None or p.next is None:return p.next = p.next.next # Your MyLinkedList object will be instantiated and called as such:
# obj = MyLinkedList()
# param_1 = obj.get(index)
# obj.addAtHead(val)
# obj.addAtTail(val)
# obj.addAtIndex(index,val)
# obj.deleteAtIndex(index)

题目3:206. 反转链表

C++代码如下,

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {if (head == nullptr || head->next == nullptr) { //特判空集或一个结点的时候return head;}ListNode* a = head;ListNode* b = a->next;while (a != nullptr && b != nullptr) {ListNode* t = b->next;b->next = a;a = b;b = t;}head->next = nullptr;return a;}
};

python3代码如下,

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:if head is None or head.next is None: #特判空集和一个结点的情况return head a = head b = a.next while a is not None and b is not None:t = b.nextb.next = a a = bb = t head.next = None return a

题目4:24两两交换链表中的节点

C++代码如下,

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* swapPairs(ListNode* head) {if (head == nullptr || head->next == nullptr) { //特判空集或者只有一个结点的情况return head;}ListNode* a = head;ListNode* b = a->next;ListNode* res = b;ListNode* aprev = nullptr;while (a != nullptr && b != nullptr) {ListNode* t = b->next;b->next = a;a->next = t;if (aprev != nullptr) aprev->next = b;aprev = a;a = t;if (a != nullptr) b = a->next;else break;}return res;}
};

python3代码如下,

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:if head is None or head.next is None: #特判空集或者一个结点的情况return head a = head b = a.next aprev = None res = b while a is not None and b is not None:t = b.next b.next = a a.next = t if aprev is not None:aprev.next = baprev = a a = tif a is not None:b = a.next else:breakreturn res 

题目5:19删除链表的倒数第 N 个结点

C++代码如下,

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int k) {//删除倒数第k个结点,快慢指针法ListNode* dummy = new ListNode(0, head);ListNode* a = dummy;ListNode* b = dummy;while (k--) { //b先走k步b = b->next;}while (b->next != nullptr) { //b走到最后一个结点a = a->next;b = b->next;}if (a->next != nullptr) a->next = a->next->next;else cout << "a->next is nullptr!" << endl;return dummy->next;}
};

python3代码如下,

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def removeNthFromEnd(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:dummy = ListNode(0, head)a = dummyb = dummy while k > 0:b = b.nextk -= 1while b.next is not None:b = b.next a = a.next a.next = a.next.next return dummy.next 

题目6:面试题 02.07. 链表相交

C++代码如下,

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if(headA == nullptr || headB == nullptr) { //特判都为空集,或者有一方为空集的情况return nullptr;}ListNode* a = headA;ListNode* b = headB;bool flaga = true;bool flagb = true;while (a != b) {a = a->next;b = b->next;if (a == nullptr) {if (flaga) {a = headB;flaga = false;} else {break;}}if (b == nullptr) {if (flagb) {b = headA;flagb = false;} else {break;}}}if (a == b) return a;else return nullptr;}
};

python3代码如下,

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:if headA is None or headB is None:return None a = headA b = headB flaga = Trueflagb = True while a != b:a = a.next b = b.next if a is None:if flaga:a = headB flaga = Falseelse:break if b is None:if flagb:b = headA flagb = False else:break if a == b:return a else:return None

题目7:142. 环形链表 II

C++代码如下,

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *detectCycle(ListNode *head) {//这次的快慢指针,是速度上的快慢指针,而非提前走的快慢指针ListNode* a = head;ListNode* b = head;while (b != nullptr && b->next != nullptr) {a = a->next;b = b->next->next;//起点到环入口的距离为x//快慢指针相遇点到环入口的距离为y//环的周长为c//有x % c = y恒成立if (a == b) { ListNode* t = head;while (t != a) {t = t->next;a = a->next;}return a;}}return nullptr;}
};

python3代码如下,

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:a = head b = head while b is not None and b.next is not None:a = a.next b = b.next.next if a == b:t = head while t != a:t = t.next a = a.next return a return None 

3 参考

代码随想录官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/6849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学一点儿前端】Bad value with message: unexpected token `.`. 问题及解决方法

问题 今天从vue3的项目copy一段代码到vue2项目&#xff0c;编译后访问页面报错了 Bad value with message: unexpected token ..注意到错误字符‘.’&#xff0c;这个错误通常发生在处理 JavaScript 或者 HTML 中的动态表达式中&#xff0c;日常使用二分法不断缩小报错代码范…

JavaScript String indexOf() 方法

一、定义和用法&#xff1a; indexOf() 方法返回值在字符串中第一次出现的位置。 如果未找到该值&#xff0c;则 indexOf() 方法返回 -1。 indexOf() 方法区分大小写。 二、语法 string.indexOf(substring, start) 1、参数 substring必需。要搜索的字符串。start可选。开…

2024“天一永安杯“宁波第七届网络安全大赛极安云科战队部分WP

“天一永安杯”2024 宁波第七届网络安全大赛暨第九届大学生网络技术与信息安全大赛 大赛竞赛形式 一、线上初赛 参赛人员&#xff1a;各单位自行选拔3人&#xff08;设队长1名&#xff09;组成团队&#xff0c;不足3人不允许参赛。 竞赛时间&#xff1a;8&#xff1a;30-12&…

LLMs:《Better Faster Large Language Models via Multi-token Prediction》翻译与解读

LLMs&#xff1a;《Better & Faster Large Language Models via Multi-token Prediction》翻译与解读 目录 《Better & Faster Large Language Models via Multi-token Prediction》翻译与解读 Abstract 2、Method方法 Memory-efficient implementation 高效内存实…

IOS APP 常见UI控件

UILabel&#xff08;标签&#xff09;UITextField&#xff08;文本输入框&#xff09;UITextView&#xff08;文本视图&#xff09;UIButton&#xff08;按钮&#xff09;UIImageView&#xff08;图像视图&#xff09;UISwitch&#xff08;开关&#xff09;UIStepper&#xff0…

详解LLMOps,将DevOps用于大语言模型开发

大家好&#xff0c;在机器学习领域&#xff0c;随着技术的不断发展&#xff0c;将大型语言模型&#xff08;LLMs&#xff09;集成到商业产品中已成为一种趋势&#xff0c;同时也带来了许多挑战。为了有效应对这些挑战&#xff0c;数据科学家们转向了一种新型的DevOps实践LLM-OP…

python数据分析——在数据分析中有关概率论的知识

参数和统计量 前言一、总体二、样本三、统计抽样四、随机抽样4.1. 抽签法4.2. 随机数法 五、分层抽样六、整群抽样七、系统抽样八、统计参数九、样本统计量十、样本均值和样本方差十一、描述样本集中位置的统计量11.1. 样本均值11.2. 样本中位数11.3. 样本众数 十二、描述样本分…

windows和linux生成代码patch补丁

windows和linux生成代码patch补丁 如需转载请标明出处&#xff1a;http://blog.csdn.net/itas109 文章目录 windows和linux生成代码patch补丁前言1. .patch补丁2. 差异文件按目录结构导出到文件夹问题1. "Hunk #1 FAILED at 1 (different line endings)" 环境&#…

K8S 哲学 - 服务发现 services

apiVersion: v1 kind: Service metadata:name: deploy-servicelabels:app: deploy-service spec: ports: - port: 80targetPort: 80name: deploy-service-podselector: app: deploy-podtype: NodePort service 的 endPoint &#xff08;ep&#xff09; 主机端口分配方式 两…

【银角大王——Django课程——靓号页面的基本操作(列表,新建,删除)】

靓号管理 靓号列表显示表结构根据表结构的需求&#xff0c;在models.py中创建类URL.py编写views.py中 函数编写列表显示HTML页面效果 新建靓号编写&#xff08;添加&#xff09;URL.py编写views.py中 函数编写新建靓号HTML数据校验方式一&#xff1a;&#xff08;正则表达式&am…

微信IDE vscode插件:获取插件位置,并打开文件

背景 有没有觉得在微信开发工具里面添加一些插件可以很方便。因为微信IDE的编辑本身是依赖vscode开发&#xff0c;所以编写vscode插件自然可以在微信IDE使用。这样做好处就是可以满足到自己一些开发使用习惯。 1.获取插件的目录位置 那么如何获取插件里面的目录&#xff0c;…

MongoDB:非关系型数据库的翘楚

MongoDB&#xff1a;非关系型数据库的翘楚 文章目录 MongoDB&#xff1a;非关系型数据库的翘楚一、引言二、MongoDB简介三、MongoDB的特点四、MongoDB的应用场景五、MongoDB的使用方法1.安装和配置1.下载MongoDB安装包2.解压安装包3.创建数据目录和日志文件4.配置环境变量5.启动…

运维各种中间件的手动安装(非常详细)

压缩文件夹 tar -zcvf newFolder.tar.gz oldFolder 把oldFolder文件夹压缩成newFolder.tar.gz解压文件夹 tar -zxvf 压缩文件名.tar.gzlinux安装jdk &#xff08;参考 https://blog.csdn.net/qq_42269466/article/details/124079963 &#xff09; 1、创建目录存放jdk包 mkd…

【AI】openai-quickstart 运行Jupyter Lab

openai-quickstart/openai_api /README-CN.md 【AI】指定python3.10安装Jupyter Lab 可以安装3.10版本的jupyter lab 但是直接输入命令无法启动 突然发现自己电脑2023年安装过anaconda3 C:\ProgramData\anaconda3\python.exe C:\ProgramData\anaconda3\cwp.py C:\ProgramData…

css基础之显示模式、背景、三大特性

显示模式、背景 一、元素显示模式 1.块级元素 独占一行&#xff0c;例如div,p&#xff0c;hr,h1-h6,ul,ol,form,table 可以设置高度宽度&#xff0c;外边距&#xff0c;内边距 宽度默认容器宽度 里面可以放行内或块级元素 注意&#xff1a; 文字类元素不能使用块级元素 <…

Ajax的请求方式

1 get 1 $.get() //通过远程Http Get请求载入信息 $.get("请求地址",{id:1;name:"一一"},function(data) {//请求成功执行的代码写在这里 }) //或者直接拼接参数 $.get("请求地址?id"id"&name"name,function(data) {//请求成功…

[ARM系列]coresight(一)

原文链接 目的&#xff1a;对复杂SOC实现debug和trace的架构 典型环境 包含&#xff1a;2个ARM core&#xff0c;一个DSP&#xff0c;众多coresight组件 coresight组件实现对core、DSP的debug和trace功能 环境中包含3个通路 trace通路&#xff1a;将core和DSP内部信息输出到…

跨域问题(服务器和浏览器之间)待补充

一、为什么产生&#xff1a; 同源策略&#xff08;域名&#xff0c;协议&#xff0c;端口&#xff09;&#xff0c;安全问题 二、怎么解决&#xff1a; 1、cros:修改响应头 2、jp&#xff1a;采用js标签 3、代理&#xff08;创建服务器&#xff0c;定义规则&#xff0c;服…

JVM笔记3-经典的垃圾收集器

上图展示了7种&#xff0c;适用于不同分代中的收集器。如果两者之间由连线&#xff0c;说明可以搭配使用。 PS&#xff1a;在JDK8中将SerialCMS和ParNewSerial Old的组合声明为废弃&#xff0c;并且在JDK9中完全取消了这两种组合的支持。 1、Serial收集器 Serial收集器是JVM中…

C++:重写和重载

重写&#xff08;Override&#xff09;和重载&#xff08;Overload&#xff09;是面向对象编程中常用的两个概念&#xff0c;它们虽然都涉及到方法的定义&#xff0c;但是在实现和使用上有着不同的特点。 重写&#xff08;Override&#xff09;&#xff1a; 重写是指在子类中重…