当前位置: 首页 > news >正文

leetcode(1)链表

# 1. 定义一个链表节点
class ListNode:def __init__(self, val=0, next_node=None):self.val = valself.next_node = next_node# 2. 定义一个 node头节点
class LinkedList:def __init__(self):self.head = None# 3.链表查找元素 get(index):
def get_node(self, index):count = 0cur = self.headwhile cur is not None and count < index - 1:count += 1cur = cur.next_nodeif cur is None:return -1return cur.val# 4.1 链表头部插入元素
def insert_head(self, val):node = ListNode(val)node.next_node = self.head.next_nodeself.head.next_node = node# 4.2 链表尾部插入元素
def insert_tail(self, val):node = ListNode(val)cur = self.head# 遍历链表 直到尾部while cur.next_node is not None:cur = cur.next_nodecur.next_node = node# 4.3 链表中第i个元素后插入元素
def insert_inside(self, index, val):count = 1cur = self.headif index <= 0:node = ListNode(val)node.next_node = self.head.next_nodeself.head.next_node = nodewhile cur is not None and count < index - 1:count += 1cur = cur.next_nodeif cur is None:return -1node = ListNode(val)node.next_node = cur.next_nodecur.next_node = node# 链表  删除第i个元素
def remove_inside(self, index):count = 0cur = self.headwhile cur.next_node and count < index - 1:count += 1cur = cur.next_nodeif cur is None:return -1del_node = cur.next_nodecur.next_node = del_node.next_node# 翻转 链表
class Solution1:def reverse_list(self, head: ListNode) -> ListNode:cur, pre = head, Nonewhile cur:tmp = cur.next  # 暂存后继节点 这里存储的是第二个节点cur.next = pre  # 修改 next 引用指向,这里指向的是最后一个元素pre = cur  # pre   当前节点完成修改指向操作后,pre指向当前节点cur = tmp  # cur   当前节点完成修改指向操作后,cur指向下一个节点return pre# 删除链表指定元素
class Solution2:def remove_elements(self, head: ListNode, val: int) -> ListNode:# 先移除头元素while head is not None and head.val == val:head = head.nextif head is None:return# 再移除后续元素pre = headwhile pre.next:if pre.next.val == val:pre.next = pre.next.nextelse:pre = pre.nextreturn head#  奇偶链表
class Solution3:def oddEvenList(self, head: ListNode) -> ListNode:if not head:return headodd = headeven_head = even = head.nextwhile odd.next and even.next: # 这里面的条件存在 如果当链表是奇数个# 奇数的下下个是奇数 同理偶数也一样odd.next = odd.next.nexteven.next = even.next.next# 奇数链表和奇数链表拼接 偶数同理odd,even = odd.next,even.nextodd.next = even_headreturn head# 回文链表
class Solution4:def isPalindrome(self, head: ListNode) -> bool:vals = []current_node = headwhile current_node is not None:vals.append(current_node.val)current_node = current_node.nextreturn vals == vals[::-1]# 深拷贝随机链表
class Solution5:def copyRandomList(self, head: 'Optional[Node]') -> 'Optional[Node]':dummy = Node(-1000000)newCurr = dummycurr = headnode2node = {}while curr:n = Node(curr.val, curr.next, curr.random)node2node[curr] = nnewCurr.next = nnewCurr = newCurr.nextcurr = curr.nextcurr = dummy.nextwhile curr:if curr.random:curr.random = node2node[curr.random]curr = curr.nextreturn dummy.next
# 链表 插入排序
class Solution6:def insertionSortList(self, head: Optional[ListNode]) -> Optional[ListNode]:if not head:return headdummy = ListNode(float('-inf'))node1,node2 = dummy,headwhile node2:nt = node2.nextwhile node1.next and node1.next.val<=node2.val:node1 = node1.nextnode1.next,node2.next = node2,node1.nextnode1,node2 = dummy,ntreturn dummy.next# 合并两个有序链表
class Solution7:def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:if not l1: return l2  # 终止条件,直到两个链表都空if not l2: return l1if l1.val <= l2.val:  # 递归调用l1.next = self.mergeTwoLists(l1.next,l2)return l1else:l2.next = self.mergeTwoLists(l1,l2.next)return l2
# 归并排序 排序列表
class Solution8:def sortList(self, head: Optional[ListNode]) -> Optional[ListNode]:if not head or not head.next:return headdummy = ListNode(float('-inf'))def merge(left, right):node = dummywhile left and right:if left.val < right.val:node.next = leftnode = leftleft = left.nextelse:node.next = rightnode = rightright = right.nextnode.next = left if left else rightreturn dummy.nextdef merge_sort(head):fast = slow = headwhile fast.next and fast.next.next:fast = fast.next.nextslow = slow.nextslow.next,slow = None,slow.nextleft = merge_sort(head) if head.next else headright = merge_sort(slow) if slow.next else slowreturn merge(left, right)return merge_sort(head)# 环形链表 快慢指针
class Solution9:def hasCycle(self, head: Optional[ListNode]) -> bool:if head == None or head.next == None: return Falseslow = headfast = head.nextwhile fast != slow:if fast.next == None or fast.next.next == None: return Falseslow = slow.nextfast = fast.next.nextreturn True# 环形链表 2
class Solution10(object):def detectCycle(self, head):fast, slow = head, headwhile True:if not (fast and fast.next): returnfast, slow = fast.next.next, slow.nextif fast == slow: breakfast = headwhile fast != slow:fast, slow = fast.next, slow.nextreturn fast# 删除倒数第n个节点
class Solution11:def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:pre = ListNode(0, head)   # 伪头节点node = pre    # 当前节点,初始化为伪头节点idx = 0    # 节点编号,初始为0node_map = {}   # 哈希表存储节点编号和节点while node:    # 遍历链表,idx最终为节点总个数node_map[idx] = nodenode = node.nextidx += 1node_map[idx - n - 1].next = node_map[idx - n].next  # 根据节点编号获取删除节点的前一个节点和要删除的节点return pre.next    # 返回头节点

相关文章:

leetcode(1)链表

# 1. 定义一个链表节点 class ListNode:def __init__(self, val0, next_nodeNone):self.val valself.next_node next_node# 2. 定义一个 node头节点 class LinkedList:def __init__(self):self.head None# 3.链表查找元素 get(index)&#xff1a; def get_node(self, index)…...

spring boot Rabbit高级教程

消息可靠性 生产者重试机制 首先第一种情况&#xff0c;就是生产者发送消息时&#xff0c;出现了网络故障&#xff0c;导致与MQ的连接中断。 为了解决这个问题&#xff0c;SpringAMQP提供的消息发送时的重试机制。即&#xff1a;当RabbitTemplate与MQ连接超时后&#xff0c;…...

FTP的魅力:构建高效的文件传输基础

1 ftp介绍 1.1 ftp服务器安装 dnf install vsftpd-3.0.3-31.el8.x86_64 -y # 安装ftp服务 systemctl enable --now vsftpd # 启动ftp服务 systemctl stop --now firewalld.service # 关闭防火墙&#xff0c;允许客户端访问anonymous_enableYES #启动匿名用户访问功能1.2 客户…...

70、window11+visual studio2019+共享内存进行数据传输

基本思想:服务端和客户端 写共享内存 #include <windows.h> #include <iostream> using namespace std;HANDLE g_EventRead; // 读信号灯 HANDLE g_EventWrite; // 写信号灯 // 定义共享数据class Writer { public:Writer(const int buf_size, const wchar_t…...

SSTI模板注入(flask) 学习总结

文章目录 Flask-jinja2 SSTI 一般利用姿势SSTI 中常用的魔术方法内建函数 利用 SSTI 读取文件Python 2Python 3 利用 SSTI 执行命令寻找内建函数 eval 执行命令寻找 os 模块执行命令寻找 popen 函数执行命令寻找 importlib 类执行命令寻找 linecache 函数执行命令寻找 subproce…...

最近的工作和生活

大家好&#xff0c;我是记得诚。 聊一聊最近的工作和生活。 不知不觉在管理岗位&#xff0c;快干一年了。技术管理还是比较纯粹&#xff0c;主要还是以解决问题为主&#xff0c;对自己的考验也更大了&#xff0c;要关注更广的技术&#xff0c;也要专注更深的技术细节。 技术…...

第六节:Word中对象的层次结构

《VBA之Word应用》&#xff08;10178982&#xff09;&#xff0c;是我推出第八套教程&#xff0c;教程是专门讲解VBA在Word中的应用&#xff0c;围绕“面向对象编程”讲解&#xff0c;首先让大家认识Word中VBA的对象&#xff0c;以及对象的属性、方法&#xff0c;然后通过实例让…...

ARJ_DenseNet BMR模型训练

废话不多数&#xff0c;模型训练代码 densenet_arj_BMR.py &#xff1a; import timefrom tensorflow.keras.applications.xception import Xception from tensorflow.keras.applications.densenet import DenseNet169 from tensorflow.keras.preprocessing.image import Im…...

React之Hook

一、是什么 Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 至于为什么引入hook&#xff0c;官方给出的动机是解决长时间使用和维护react过程中常遇到的问题&#xff0c;例如&#xff1a; 难以重用和共享组件中的与状态…...

OSG嵌入QT的简明总结2

正文 我之前在这篇博文《OSG嵌入QT的简明总结》中论述了OSG在QT中显示的可视化问题。其中提到官方提供的osgQt项目&#xff08;地址&#xff1a;https://github.com/openscenegraph/osgQt &#xff09;很久前已经更新了。但是我一直没有时间同步更新&#xff0c;最近重新尝试了…...

日常中msvcp71.dll丢失怎样修复?分享5个修复方法

在 Windows 系统中&#xff0c;msvcp71.dll 是一个非常重要的动态链接库文件&#xff0c;它承载了许多应用程序和游戏的运行。如果您的系统中丢失了这个文件&#xff0c;那么您可能会遇到无法打开程序、程序崩溃或出现错误提示等问题。本文将介绍 5 个快速修复 msvcp71.dll 丢失…...

【腾讯云TDSQL-C Serverless 产品体验】使用 Python向TDSQL-C添加读取数据实现词云图

关于TDSQL-C Serverless介绍 TDSQL-C 是腾讯云自主研发的新一代云原生关系型数据库。 它融合了传统数据库、云计算和新硬件技术的优势,100%兼容 MySQL,为用户提供具有极致弹性、高性能、高可用性、高可靠性和安全性的数据库服务。 TDSQL-C 实现了超过百万每秒的高吞吐量,支持…...

服务器感染了.360、.halo勒索病毒,如何确保数据文件完整恢复?

导言&#xff1a; 数据的安全性至关重要&#xff0c;但威胁不断进化&#xff0c;.360、.halo勒索病毒是其中的令人担忧的勒索软件。本文91数据恢复将深入介绍.360、.halo勒索病毒&#xff0c;包括其威胁本质、数据恢复方法和如何采取预防措施来保护您的数据。 如果受感染的数据…...

BAT028:批量将文件修改日期后缀更新为最新修改日期

引言&#xff1a;编写批处理程序&#xff0c;实现批量将文件修改日期后缀更新为最新修改日期。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击【…...

Visual Studio C++ 的 头文件和源文件

在Visual Studio C中&#xff0c;头文件&#xff08;Header Files&#xff09;和源文件&#xff08;Source Files&#xff09;是两种不同的文件类型&#xff0c;用于组织和管理C代码。 头文件&#xff08;Header Files&#xff09;&#xff1a; 后缀名为.h或.hpp的文件&#xf…...

Scrapy框架中的Middleware扩展与Scrapy-Redis分布式爬虫

在爬虫开发中&#xff0c;Scrapy框架是一个非常强大且灵活的选择。在本文中&#xff0c;我将与大家分享两个关键的主题&#xff1a;Scrapy框架中的Middleware扩展和Scrapy-Redis分布式爬虫。这些主题将帮助你更好地理解和应用Scrapy框架&#xff0c;并提升你的爬虫开发技能。 …...

[论文笔记]Sentence-BERT[v2]

引言 本文是SBERT(Sentence-BERT)论文1的笔记。SBERT主要用于解决BERT系列模型无法有效地得到句向量的问题。很久之前写过该篇论文的笔记,但不够详细,今天来重新回顾一下。 BERT系列模型基于交互式计算输入两个句子之间的相似度是非常低效的(但效果是很好的)。当然可以通过…...

虚拟机ubantu系统突然重启失去网络

1.进入 root用户 cd /var/lib/NetworkManager然后查看网络服务状态 如果网络状态和我一样不可用 ,就先停止网络服务 service ModemManager stop#删除状态rm networker.stateservice ModemManager start此时右上交的网络标志回复正常...

三款经典的轮式/轮足机器人讲解,以及学习EG2133产生A/B/C驱动电机。个人机器人学习和开发路线(推荐)

1&#xff0c;灯哥开源&#xff08;有使用指南&#xff0c;适合刚入门新手&#xff09; 机械部分&#xff1a;2个foc无刷电机 硬件和软件部分&#xff1a;没有驱动板子。只有驱动器&#xff0c;主控板esp32和驱动器通过pwm直接通讯。驱动器板子上有蓝色电机接口&#xff0c;直…...

apache开启https

本文基于windows平台。 个人感觉使用apache配置起来比较繁琐&#xff0c;而使用upupw或者xmpp等集成开发工具更方便。 在httpd.conf中&#xff0c;将下一行的注释去掉&#xff1a;LoadModule ssl_module modules/mod_ssl.so。另外&#xff0c;千万不要注释掉下面的一行&#…...

绝地求生游戏缺少msvcp140.dll丢失打不开怎么办?这6个方法都能修复

计算机系统中&#xff0c;我们经常遇到各种错误和问题。其中&#xff0c;“MSCVCP140.DLL丢失”是一个常见的错误&#xff0c;它通常出现在运行某些程序或游戏时。这个DLL文件是Microsoft Visual C 2015 Redistributable的一部分&#xff0c;如果它丢失或损坏&#xff0c;可能会…...

【广州华锐互动】石油钻井井控VR互动实训系统

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐渗透到各个领域&#xff0c;为人们的生活和工作带来了前所未有的便利。在石油钻井行业&#xff0c;VR技术的应用也日益受到重视&#xff0c;为钻井工人提供了更加安全、高效的培训方式。 广州华锐…...

单链表算法经典OJ题

目录 1、移除链表元素 2、翻转链表 3、合并两个有序链表 4、获取链表的中间结点 5、环形链表解决约瑟夫问题 6、分割链表 1、移除链表元素 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; typedef struct ListNode LSNode; struct ListNode* remove…...

Picnic master project interview

picnic Picnic master project interview1. Topics1.1 Systematically identify similar/interchangeable articles1.2 Understanding changing customer behaviour 2. interview等后续 Picnic master project interview 1. Topics 1.1 Systematically identify similar/inte…...

nginx部署vue项目(访问路径加前缀)

nginx部署vue项目(访问路径加前缀) nginx部署vue项目&#xff0c;访问路径加前缀分为两部分&#xff1a; &#xff08;1&#xff09;修改vue项目&#xff1b; &#xff08;2&#xff09;修改nginx配置&#xff1b; vue项目修改 需注意&#xff0c;我这是vue-cli3配置&#x…...

element-ui中表格树类型数据的显示

项目场景&#xff1a; 1&#xff1a;非懒加载的情况 1&#xff1a;效果展示 2&#xff1a;问题描述以及解决 1&#xff1a;图片展示 2&#xff1a;html <-- default-expand-all 代表默认展开 如果不展开删除就行 --> <el-tableref"refsTable"v-loadin…...

【扩散模型】如何用最几毛钱生成壁纸

通过学习扩散模型了解到了统计学的美好&#xff0c;然后顺便记录下我之前文生图的基础流程~ 扩散模型简介 这次是在DataWhale的组队学习里学习的&#xff0c;HuggingFace开放扩散模型学习地址 扩散模型训练时通过对原图增加高斯噪声&#xff0c;在推理时通过降噪来得到原图&…...

零基础Linux_17(进程间通信)VSCode环境安装+进程间通信介绍+pipe管道mkfifo

目录 1. VSCode环境安装 1.1 使用VSCode 1.2 远程链接到Linux机器 1.3 VSCode调试 2. 进程间通讯介绍 2.1 进程间通讯的概念和意义 2.2 进程间通讯的策略和本质 3. 管道 3.1 管道介绍 3.2 匿名管道介绍 3.3 匿名管道示例代码 3.3.1 建立管道的pipe 3.3.2 匿名管道…...

Redis的BitMap使用

Redis的BitMap使用 Redis 为我们提供了位图这一数据结构&#xff0c;每个用户每天的登录记录只占据一位&#xff0c;365天就是365位&#xff0c;仅仅需要46字节就可存储&#xff0c;极大地节约了存储空间。 位图不是实际的数据类型&#xff0c;而是一组面向位的操作 在被视为…...

java并发编程之基础与原理1

java多线程基础 下面说一下线程的7种状态 下面我重点来说一下阻塞状态 阻塞状态是可以分很多种的&#xff1a; 下面用另外一张图来说明这种状态 简单说一下线程的启动原理 下面说一下java中的线程 java线程的异步请求方式 上面就会先把main执行出来&#xff0c;等阻塞结束之后…...