LeetCode: 高频链表题目总结 - Python

LeetCode:高频链表题目总结

问题描述:

  1. LeetCode: 2. 两数相加 , 注意是逆序存储,相加求和
  2. LeetCode: 19. 删除链表的倒数第 N 个结点
  3. LeetCode: 21. 合并两个有序链表
  4. LeetCode: 23. 合并 K 个升序链表
  5. LeetCode: 24. 两两交换链表中的节点 ,两两相邻的节点交换
  6. LeetCode: 25. K 个一组翻转链表
  7. LeetCode: 61. 旋转链表
  8. LeetCode: 83. 删除排序链表中的重复元素 ,已经排序,只保留一个
  9. LeetCode: 82. 删除排序链表中的重复元素 II ,已经排序,一个不保留
  10. LeetCode: 86. 分隔链表 ,根据一个元素判断,小的在前面大的在后面
  11. LeetCode: 92. 反转链表 II ,给定一个区间[left <= right]进行反转
  12. LeetCode: 114. 二叉树展开为链表 ,先序遍历类型
  13. LeetCode: 138. 复制带随机指针的链表
  14. LeetCode: 141. 环形链表 ,判断是否存在环
  15. LeetCode: 142. 环形链表 II ,找环的入口
  16. LeetCode: 143. 重排链表 ,首尾交替链接类型
  17. LeetCode: 148. 排序链表 ,由小到大排序,归并排序即可
  18. LeetCode: 160. 相交链表 ,求两个链表的交点
  19. LeetCode: 206. 反转链表 ,头插发
  20. LeetCode: 234. 回文链表 ,输出反转
  21. 剑指 Offer 18. 删除链表的节点 ,正常删除类型
  22. 剑指 Offer 22. 链表中倒数第k个节点 ,查找类型

(1)LeetCode: 2. 两数相加 Python3实现:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:carry = 0notehead = ListNode(0)curr = noteheadwhile l1 != None or l2 != None:n = l1.val if l1 != None else 0m = l2.val if l2 != None else 0sum = carry + n + mcarry = int(sum/10)curr.next = ListNode(sum%10)curr = curr.nextif l1 != None: l1 = l1.next   # 进入下一个if l2 != None: l2 = l2.next if carry > 0:curr.next = ListNode(carry)return notehead.next

(2)LeetCode: 19. 删除链表的倒数第 N 个结点 Python3实现:

class Solution:def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:res = ListNode(0, head)fist = headsecond = resfor _ in range(n):fist = fist.nextwhile fist:fist = fist.nextsecond = second.nextsecond.next = second.next.nextreturn res.next

(3)LeetCode: 21. 合并两个有序链表 Python3实现:

class Solution:def mergeTwoLists(self, list1, list2):if not list1: return list2if not list2: return list1if list1.val < list2.val:l3, list1 = list1, list1.nextelse:l3, list2 = list2, list2.nextcur = l3while list1 and list2:if list1.val < list2.val:cur.next, list1 = list1, list1.nextelse:cur.next, list2 = list2, list2.nextcur = cur.nextcur.next = list1 if list1 else list2return l3

(4)LeetCode: 23. 合并 K 个升序链表 Python3实现:

class Solution:def mergeTwoLists(self, list1, list2):if not list1: return list2if not list2: return list1if list1.val < list2.val: l3, list1 = list1, list1.nextelse:l3, list2 = list2, list2.nextcur = l3while list1 and list2:if list1.val < list2.val:  cur.next, list1 = list1, list1.nextelse:  cur.next, list2 = list2, list2.nextcur = cur.nextcur.next = list1 if list1 else list2return l3def mergeKLists(self, lists):if len(lists) == 0:return Noneif len(lists) == 1:return lists[0]k = len(lists)res = lists[0]for i in range(1, k):res = self.mergeTwoLists(res, lists[i])return res

(5)LeetCode: 24. 两两交换链表中的节点 Python3实现:

class Solution:def swapPairs(self, head):if not head: return headres = ListNode(0, head)c = reswhile c.next and c.next.next:a, b = c.next, c.next.nextc.next, a.next = b, b.nextb.next = ac = c.next.nextreturn res.next

(6)LeetCode: 25. K 个一组翻转链表 Python3实现:

class Solution:# 翻转一个子链表,并且返回新的头与尾def reverse(self, head: ListNode, tail: ListNode):prev = tail.nextp = headwhile prev != tail:nex = p.nextp.next = prevprev = pp = nexreturn tail, headdef reverseKGroup(self, head: ListNode, k: int) -> ListNode:hair = ListNode(0)hair.next = headpre = hairwhile head:tail = pre# 查看剩余部分长度是否大于等于 kfor i in range(k):tail = tail.nextif not tail:return hair.nextnex = tail.nexthead, tail = self.reverse(head, tail)# 把子链表重新接回原链表pre.next = headtail.next = nexpre = tailhead = tail.nextreturn hair.next

(7)LeetCode: 61. 旋转链表 Python3实现:

class Solution:def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:if k == 0 or not head or not head.next:return headcur = headn = 1while cur.next:cur = cur.nextn += 1add = n - k % n if add == n:  # 倍数的时候return headcur.next = headwhile add:cur = cur.nextadd -= 1res = cur.nextcur.next = Nonereturn res

(8)LeetCode: 83. 删除排序链表中的重复元素 Python3实现:

class Solution:def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:if not head:return headcur = headwhile cur.next:if cur.next.val == cur.val:cur.next = cur.next.nextelse:cur = cur.nextreturn head

(9)LeetCode: 82. 删除排序链表中的重复元素 II Python3实现:

class Solution:def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:if not head:return headpre = ListNode(0, head)cur = prewhile cur.next and cur.next.next:if cur.next.val == cur.next.next.val:x = cur.next.valwhile cur.next and cur.next.val == x:cur.next = cur.next.nextelse:cur = cur.nextreturn pre.next

(10)LeetCode: 86. 分隔链表 Python3实现:

class Solution:def partition(self, head: Optional[ListNode], x: int) -> Optional[ListNode]:small = ListNode()large = ListNode()pre_small = smallpre_large = largewhile head:if head.val < x:small.next = headsmall = small.nextelse:large.next = headlarge = large.nexthead = head.nextlarge.next = Nonesmall.next = pre_large.nextreturn pre_small.next

(11)LeetCode: 92. 反转链表 II Python3实现:

class Solution:def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:pre_head = ListNode(0, head)pre = pre_headfor _ in range(left -1):pre = pre.nextcur = pre.nextfor _ in range(right - left):tmp = cur.nextcur.next = cur.next.nexttmp.next = pre.nextpre.next = tmpreturn pre_head.next

(12)LeetCode: 114. 二叉树展开为链表 Python3实现:

class Solution:def flatten(self, root: Optional[TreeNode]) -> None:"""Do not return anything, modify root in-place instead."""res = []def dfs(root):if  root:res.append(root)if root.left: dfs(root.left)if root.right: dfs(root.right)dfs(root)n = len(res)for i in range(1, n):pre, cur = res[i-1], res[i]pre.left = Nonepre.right = cur

(13)LeetCode: 138. 复制带随机指针的链表 Python3实现:

class Solution:def copyRandomList(self, head: 'Optional[Node]') -> 'Optional[Node]':my_dict = {}def copynode(node):if node is None: return Noneif my_dict.get(node): return my_dict.get(node)root = Node(node.val)  # 存入字典my_dict[node] = rootroot.next = copynode(node.next)  # 继续获取下一个节点root.random = copynode(node.random)  # 继续获取下一个随机节点return rootreturn copynode(head)

(14)LeetCode: 141. 环形链表 Python3实现:

class Solution:def hasCycle(self, head: ListNode) -> bool:if not head or not head.next:return Falseslow = headfast = head.nextwhile slow != fast:if not fast or not fast.next:return Falseslow = slow.nextfast = fast.next.nextreturn True

(15)LeetCode: 142. 环形链表 II Python3实现:

class Solution:def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:slow = headfast = headwhile fast:slow = slow.nextif not fast.next:return Nonefast = fast.next.nextif fast == slow:pre = headwhile pre != slow:slow = slow.nextpre = pre.nextreturn prereturn None

(16)LeetCode: 143. 重排链表 Python3实现:

class Solution:def reorderList(self, head):if not head: returnltmp = []cur = headwhile cur:  # 转换成列表ltmp.append(cur)cur = cur.nextn = len(ltmp)  # 链表长度for i in range(n // 2):  # 处理ltmp[i].next = ltmp[n - 1 - i]ltmp[n - 1 - i].next = ltmp[i + 1]ltmp[n // 2].next = None  # 最后一个指向空

(17)LeetCode: 148. 排序链表 Python3实现:

class Solution:def sortList(self, head: ListNode) -> ListNode:if not head or not head.next:return headslow = headfast = headwhile fast.next and fast.next.next:  # 用快慢指针分成两部分slow = slow.nextfast = fast.next.nextmid = slow.next  # 找到左右部分, 把左部分最后置空slow.next = Noneleft = self.sortList(head)   # 递归下去right = self.sortList(mid)return self.merge(left, right)  # 合并def merge(self, left, right):dummy = ListNode(0)p = dummyl = leftr = rightwhile l and r:if l.val < r.val:p.next = ll = l.nextp = p.nextelse:p.next = rr = r.nextp = p.nextif l:p.next = lif r:p.next = rreturn dummy.next

(18)LeetCode: 160. 相交链表 Python3实现:

class Solution:def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> Optional[ListNode]:if headA is None or headB is None:return Nonepa = headApb = headBwhile pa != pb:pa = pa.next if pa else headBpb = pb.next if pb else headAreturn pa

(19)LeetCode: 206. 反转链表 Python3实现:

class Solution:def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:if not head: return headpre = Nonecur = headnext = head.nextwhile next:cur.next = prepre = curcur = nextnext = next.nextcur.next = prereturn cur

(20)LeetCode: 234. 回文链表 Python3实现:

class Solution:def isPalindrome(self, head: Optional[ListNode]) -> bool:vals = []cur = headwhile cur:vals.append(cur.val)cur = cur.nextreturn vals == vals[::-1]

(21)剑指 Offer 18. 删除链表的节点 Python3实现:

class Solution:def deleteNode(self, head: ListNode, val: int) -> ListNode:if head is None:return headpre = ListNode(0)pre.next = headcur = prewhile cur and cur.next:if cur.next.val == val:cur.next = cur.next.nextcur = cur.nextreturn pre.next

(22)剑指 Offer 22. 链表中倒数第k个节点 Python3实现:

class Solution:def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:res = ListNode(0)res.next = headfist = headsecond = resfor _ in range(k):fist = fist.nextwhile fist:fist = fist.nextsecond = second.nextreturn second.next

相关参考:
声明: 总结学习,有问题或不当之处,可以批评指正哦,谢谢。

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

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

相关文章

升级OpenSSL并进行编译安装

Packaging (OpenSSL)组件存在安全漏洞的原因是由于当前爆出的Openssl漏洞。 这个漏洞可能会导致泄露隐私信息&#xff0c;并且涉及的机器和环境也有所不同&#xff0c;因此修复方案也会有所不同。 目前&#xff0c;一些服务器使用的Nginx是静态编译OpenSSL&#xff0c;直接将Op…

LeetCode-37-解数独

题目描述&#xff1a;编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&am…

2023陇剑杯

2023陇剑杯初赛WP HW hard_web_1 ​ 首先判断哪个是服务器地址 ​ 从响应包看&#xff0c;给客户端返回数据包的就是服务器 所以确定服务器地址是192.168.162.188​ 再从开放端口来看&#xff0c;长期开放的端口 客户端发送一个TCP SYN包&#xff08;同步请求&#xff…

记一次线上BUG排查过程

1. 线上遇到一个非常奇怪的bug&#xff0c;为一个用户分配业务线类型后&#xff0c;该用户登录时&#xff0c;提示502&#xff0c;但其它的用户登录完全是正常的 2. 问题现象 3. 排查思路 先去看线上日志&#xff0c;看是否有error&#xff0c;但日志里边这个接口200正常返回…

Django系列:Django的项目结构与配置解析

Django系列 Django的项目结构与配置解析 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/132893616 【介…

Nginx配置最佳实践

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

2023/9/18 -- C++/QT

作业 完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两…

【论文阅读 05】图像异常检测研究现状综述

1 图像异常检测任务 图像异常检测任务根据异常的形态可以分为定性异常的分类和定量异常的定位两个类别. 定性异常的分类&#xff1a;整体地给出是否异常的判断&#xff0c;无需准确定位异常的位置。 如图2左上图所示, 左侧代表正常图像, 右侧代表异常图像, 在第1行中,模…

企业电子招投标采购系统源码——功能模块功能描述+数字化采购管理 采购招投标

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看所…

docker run:--privileged=true选项解析(特权模式:赋予容器几乎与主机相同的权限)

文章目录 Docker的--privilegedtrue选项1. Docker 容器的安全性1.1 Linux Namespace 和 Capabilities1.2 限制和权限 2. Docker的--privilegedtrue选项2.1 --privilegedtrue的作用2.2 --privilegedtrue的风险 3. 结论 Docker的–privilegedtrue选项 Docker在创建和运行容器时&…

【在学】卡尔曼滤波/分布式卡尔曼滤波

在学&#xff0c;持续更新&#xff0c;欢迎交流… 想看看卡尔曼滤波/分布式卡尔曼滤波坑里还有多少人… 2023.08.18 为了令卡尔曼滤波器开始工作&#xff0c;我们需要告诉卡尔曼两个零时刻的初始值&#xff0c;是X(0|0)和P(0|0)。他们的值不用太在意&#xff0c;随便给一个就…

国家高新技术企业认定六个必要条件详细解读!

相信很多企业都想认定高新技术企业&#xff0c;因为认定成功的高新技术企业&#xff0c;可以享受很多政府资助政策&#xff0c;为公司创造很多便利条件。 但是&#xff0c;很多企业对于高企认定的条件却比较迷糊&#xff0c;今天至善科技为大家解读一下国家高新技术企业认定的六…

Maven 安装配置

Maven 安装配置 文章目录 Maven 安装配置一、下载 Maven二、解压Maven核心程序三、指定本地仓库四、配置阿里云镜像仓库4.1 将原有的例子配置注释掉4.2 加入新的配置 五、配置 Maven 工程的基础 JDK 版本六、配置环境变量6.1 检查 JAVAHOME 配置是否正确6.2 配置 MAVENHOME6.3 …

node 之 express 框架(初级)

一、express 热更新 1、安装扩展 npm install node-dev -D2、在根目录下的 package.json 文件中进行配置 3、之后的启动执行下面的命令即可 npm run dev二、mvc中的 模板引擎 1、ejs模板引擎的安装 npm install ejs -s2、在根目录下的app.js文件中配置 app.set(view engin…

第21章_瑞萨MCU零基础入门系列教程之事件链接控制器ELC

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

腾讯mini项目-【指标监控服务重构】2023-08-16

今日已办 v1 验证 StageHandler 在处理消息时是否为单例&#xff0c;【错误尝试】 type StageHandler struct { }func (s StageHandler) Middleware1(h message.HandlerFunc) message.HandlerFunc {return func(msg *message.Message) ([]*message.Message, error) {log.Log…

沈阳建筑大学《乡村振兴战略下传统村落文化旅游设计》 许少辉八一著作

沈阳建筑大学《乡村振兴战略下传统村落文化旅游设计》 许少辉八一著作

怎么推广自己抖店的商品?最适合0经验新手操作的办法,来看看

我是王路飞。 抖店开通后&#xff0c;想要把自己店铺的商品卖出去&#xff0c;就需要进行推广了。 但是怎么推广呢&#xff1f; 要么利用抖音的搜索和推荐流量&#xff0c;获取曝光&#xff0c;实现点击和转化。 不过这种玩法有个弊端&#xff0c;就是需要你有一定的电商经…

农民朋友有福利啦!建行江门市分行“裕农通+农资结算”平台正式上线

随着广东广圣农业发展有限公司办公室内的裕农通“智慧眼”结算机“叮”的一声到账提醒&#xff0c;标志着全国首个“裕农通农资结算“平台的成功上线&#xff0c;也标志着建行广东省江门市分行的裕农通业务又迈上了一个新的台阶。 广东广圣农业发展有限公司&#xff08;以下简…

FTP这么“好用”和“便宜”,为什么企业还要替换掉?

FTP是一种历史悠久的网络协议&#xff0c;自1971年问世以来&#xff0c;它因其简易性、便捷性以及强大的跨平台兼容性而被广泛使用。在网站开发、软件更新和数据备份等多个场景中&#xff0c;FTP都发挥了重要作用。不过&#xff0c;随着互联网技术的不断发展和企业需求的多样化…