LeetCode---【链表的操作】

news2024/9/29 9:32:23

目录

  • 206反转链表【链表结构基础】
  • 21合并两个有序链表【递归】
    • 我的答案【错误】
    • 自己修改【超出时间限制】
    • 在官方那里学到的【然后自己复写,错误】
    • 对照官方【自己修改】
  • 160相交链表【未理解题目目的】
    • 在b站up那里学到的【然后自己复写,错误】
    • 【超出时间限制】
    • 对照官方【自己修改】
  • 19删除链表的倒数第 N 个结点
    • 看完官方解题思路【自己复写,错误】
    • 报错信息
    • 第一遍修改
    • 第二遍修改
  • 148排序链表
  • 我的答案【冒泡排序:最小的负数输出时变为0】
    • 官方答案【归并排序】

206反转链表【链表结构基础】

  • 设定一个前结点和后结点。
class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        pre=None
        cur=head
        while cur!=None:
            temp=cur.next
            cur.next=pre
            pre=cur
            cur=temp
        return pre

21合并两个有序链表【递归】

我的答案【错误】

class Solution(object):
    def mergeTwoLists(self, list1, list2):
        """
        :type list1: Optional[ListNode]
        :type list2: Optional[ListNode]
        :rtype: Optional[ListNode]
        """
        resol=ListNode()
        while list1!=None and list2!=None:
            if list1.val<=list2.val:
                resol.next=ListNode(list1.val)
            else:
                resol.next=ListNode(list2.val)
            list1=list1.next
            list2=list2.next

        while list1!=None:
            resol.next=ListNode(list1.val)
        while list2!=None:
            resol.next=ListNode(list2.val)
            
        return resol.next

自己修改【超出时间限制】

class Solution(object):
    def mergeTwoLists(self, list1, list2):
        """
        :type list1: Optional[ListNode]
        :type list2: Optional[ListNode]
        :rtype: Optional[ListNode]
        """
        resol=ListNode(0)
        temp=resol
        while list1 and list2:
            if list1.val<=list2.val:
                resol.next=list1
                list1=list1.next################
            else:
                resol.next=list2
                list2=list2.next################
            resol=resol.next######################其实是不断增加结点的过程,所以记得更新
        while list1:
            resol.next=list1
        while list2:
            resol.next=list2
            
        return temp.next

在官方那里学到的【然后自己复写,错误】

class Solution(object):
    def mergeTwoLists(self, list1, list2):
        """
        :type list1: Optional[ListNode]
        :type list2: Optional[ListNode]
        :rtype: Optional[ListNode]
        """
        if list1 is None:
            return list2
        elif list2 is None:
            return list1
        else:
            if list1.val<list2.val:
                list1.next=mergeTwoLists(self,list1.next,list2)###如果只改mergeTwoLists(self,list1.next,list2)也是可以编译通过的,运行成功,else这里的逻辑也可以修正一下
                return list1
            else:
                list2.next=mergeTwoLists(self,list2.next,list1)
                return list2

对照官方【自己修改】

class Solution(object):
    def mergeTwoLists(self, list1, list2):
        """
        :type list1: Optional[ListNode]
        :type list2: Optional[ListNode]
        :rtype: Optional[ListNode]
        """
        if list1 is None:
            return list2
        elif list2 is None:
            return list1
        elif list1.val<list2.val:
            list1.next=self.mergeTwoLists(list1.next,list2)########函数的调用
            return list1
        else:
            list2.next=self.mergeTwoLists(list2.next,list1)########函数的调用
            return list2

160相交链表【未理解题目目的】

  • 我看输入部分都已经给了要输出的结果了,就不明白这题目的是要做什么。

在b站up那里学到的【然后自己复写,错误】

class Solution(object):
    def getIntersectionNode(self, headA, headB):
        """
        :type head1, head1: ListNode
        :rtype: ListNode
        """
        p=headA,q=headB
        while(p!=q):
            p ? p.next : headB
            q ? q.next : headA
        print("p.val")

【超出时间限制】

class Solution(object):
    def getIntersectionNode(self, headA, headB):
        """
        :type head1, head1: ListNode
        :rtype: ListNode
        """
        p=headA
        q=headB
        while(p!=q):
            if p.next !=None:
                p=p.next
            else:
                p=headB
            if q.next!=None:
                q=q.next
            else:
                q=headA
        return p

对照官方【自己修改】

class Solution(object):
    def getIntersectionNode(self, headA, headB):
        """
        :type head1, head1: ListNode
        :rtype: ListNode
        """
        p=headA ####p,q=headA,headB这样可以
        q=headB ####p=headA,q=headB会报错
        while(p!=q):
            p = p.next if p else headB
            q = q.next if q else headA
        return p

19删除链表的倒数第 N 个结点

看完官方解题思路【自己复写,错误】

class Solution(object):
    def removeNthFromEnd(self, head, n):
        """
        :type head: ListNode
        :type n: int
        :rtype: ListNode
        """
       p=head
       for i in range(n+1):
           p=p.next
       q=head
       while p!=None:
           q=q.next
           p=p.next###########【这里不能少啊!】
       q.next=q.next.next
       return head

报错信息

在这里插入图片描述

  • 查阅资料后发现:【self.head是指向第一个元素的,此时为None,所以没有next属性,自然就会报错。因此第一个结点需要特殊处理,我们一般通过增加头结点的方式来避免这种特殊处理。

第一遍修改

  • 发现当链表有n个元素时,无法删除倒数第n个元素。
  • 【没有考虑到第一个结点的特殊性。】
class Solution(object):
    def removeNthFromEnd(self, head, n):
        """
        :type head: ListNode
        :type n: int
        :rtype: ListNode
        """

        p=ListNode(0, head)#################
        for i in range(n+1):
            p=p.next
        q=ListNode(0, head)#################
        while p!=None:
            q=q.next
            p=p.next
        q.next=q.next.next#########无法删除倒数第n个元素
        return head

第二遍修改

class Solution(object):
    def removeNthFromEnd(self, head, n):
        """
        :type head: ListNode
        :type n: int
        :rtype: ListNode
        """

        dummy=ListNode(0, head)
        p=dummy
        for i in range(n+1):
            p=p.next
        q=dummy
        while p!=None:
            q=q.next
            p=p.next
        q.next=q.next.next
        return dummy.next 

148排序链表

我的答案【冒泡排序:最小的负数输出时变为0】

class Solution(object):
    def sortList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        dummy=ListNode(0,head)
        q=dummy
        while q.next!=None:
            p=dummy
            while p.next!=None:
                if p.val>p.next.val:
                    temp=p.val
                    p.val=p.next.val
                    p.next.val=temp
                p=p.next
            q=q.next
        return dummy.next

在这里插入图片描述

官方答案【归并排序】

class Solution(object):
    def sortList(self, head):
        def sortFunc(head, tail):
            if not head:
                return head
            if head.next == tail:
                head.next = None
                return head
            slow = fast = head
            while fast != tail:
                slow = slow.next
                fast = fast.next
                if fast != tail:
                    fast = fast.next
            mid = slow
            return merge(sortFunc(head, mid), sortFunc(mid, tail))
        ######合并两个升序链表,但是长度差最多为1    
        def merge(head1, head2):
            dummyHead = ListNode(0)
            temp, temp1, temp2 = dummyHead, head1, head2
            while temp1 and temp2:
                if temp1.val <= temp2.val:
                    temp.next = temp1
                    temp1 = temp1.next
                else:
                    temp.next = temp2
                    temp2 = temp2.next
                temp = temp.next
            if temp1:
                temp.next = temp1
            elif temp2:
                temp.next = temp2
            return dummyHead.next
        
        return sortFunc(head, None)

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

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

相关文章

Mybatis插入数据时有外键怎么办?

今天在写代码的时候遇到了一个问题&#xff1a; 比方说我的数据库如下&#xff1a; 其中work_position和auth都是外键&#xff0c;关联了另一张表。 但我现在要往mysql里插入一条数据&#xff0c;如下&#xff1a; insert into t_employee_info(salary, work_time, work_posi…

Qt 简约又简单的加载动画 第七季 音量柱风格

今天和大家分享两个音量柱风格的加载动画,这次的加载动画的最大特点就是简单,只有几行代码. 效果如下: 一共三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc…

飞天使-学以致用-devops知识点4-SpringBoot项目CICD实现(实验失败,了解大概流程)

文章目录 代码准备创建jenkins 任务测试推送使用项目里面的jenkinsfile 进行升级操作 文字版本流程项目构建 代码准备 推送代码到gitlab 代码去叩叮狼教育找 k8s 创建jenkins 任务 创建一个k8s-cicd-demo 流水线任务 将jenkins 里面构建时候的地址还有token&#xff0c; 给到…

langchain学习笔记(十)

Bind runtime args | &#x1f99c;️&#x1f517; Langchain 1、有时&#xff0c;我们希望使用常量参数调用Runnable序列中的Runnable&#xff0c;这些参数不是序列中前一个Runnable的输出的一部分&#xff0c;也不是用户的输入&#xff0c;这时可以用Runnable.bind() from …

离散系统的冲激响应和阶跃响应

离散系统的冲激响应和阶跃响应 方法一&#xff1a; 使用 impz()dstep() 求冲激和阶跃响应 \textbf{方法一&#xff1a;}使用\textbf{impz()}\textbf{dstep()}求冲激和阶跃响应 方法一&#xff1a;使用impz()dstep()求冲激和阶跃响应 方法二&#xff1a; 使用 filtic()filter() …

精准唇语同步:Wav2Lip 引领视频技术前沿 | 开源日报 No.188

Rudrabha/Wav2Lip Stars: 8.4k License: NOASSERTION Wav2Lip 是一个准确地在野外进行视频唇语同步的项目。 该项目的主要功能、关键特性和核心优势包括&#xff1a; 可以高精度地将视频与任何目标语音进行唇语同步适用于任何身份、声音和语言&#xff0c;也适用于 CGI 面孔和…

SpringCloud负载均衡源码解析 | 带你从表层一步步剖析Ribbon组件如何实现负载均衡功能

目录 1、负载均衡原理 2、源码分析 2.1、LoadBalanced 2.2、LoadBalancerClient 2.3、RibbonAutoConfiguration 2.4、LoadBalancerAutoConfiguration 2.5、LoadBalancerIntercepor⭐ 2.6、再回LoadBalancerClient 2.7、RibbonLoadBalancerClient 2.7.1、DynamicServe…

Git 如何上传本地的所有分支

Git 如何上传本地的所有分支 比如一个本地 git 仓库里定义了两个远程分支&#xff0c;一个名为 origin&#xff0c; 一个名为 web 现在本地有一些分支是 web 远程仓库没有的分支&#xff0c;如何将本地所有分支都推送到 web 这个远程仓库上呢 git push web --all

一定用得到数据预处理:去噪、滤波方法!限幅滤波、中值滤波、均值滤波、递推平均滤波,直接运行!

​适用平台&#xff1a;Matlab2020版本及以上 在实际应用中&#xff0c;滤波、去噪都是用于信号处理的工具&#xff0c;通常用于机器学习/深度学习技术前的数据预处理阶段&#xff0c;主要作用在于对信号进行平滑处理或者去除噪声&#xff0c;从而提取出信号中的有用信息或者改…

数据库原理(一)

1、基本概念 学号姓名性别出生年月籍贯220101张三男2003江苏220102李四男2003山东220103王五女2003河北220104赵六女2003天津220105张四男2003北京220106李五女2003江苏220107王六女2003山东220108张七男2003河北220109张九男2003天津220110李十女2003北京 1.1数据&#xff0…

Leetcoder Day36| 动态规划part03

343. 整数拆分 给定一个正整数 n&#xff0c;将其拆分为至少两个正整数的和&#xff0c;并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2输出: 1解释: 2 1 1, 1 1 1。 示例 2: 输入: 10输出: 36解释: 10 3 3 4, 3 3 4 36。说明: 你可以假设 …

LeetCode102.二叉树的层序遍历

题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]输入&#xff1a;root [1] 输出&am…

刷题日记:面试经典 150 题 DAY3

刷题日记&#xff1a;面试经典 150 题 DAY3 274. H 指数238. 除自身以外数组的乘积380. O(1) 时间插入、删除和获取随机元素134. 加油站135. 分发糖果 274. H 指数 原题链接 274. H 指数 重要的是都明白H指数到底是是个啥。注意到如果将引用数从大到小排序&#xff0c;则对于…

使用 Docker 部署 MrDoc 在线文档管理系统

1&#xff09;MrDoc 介绍 MrDoc 简介 MrDoc 觅思文档&#xff1a;https://mrdoc.pro/ MrDoc 使用手册&#xff1a;https://doc.mrdoc.pro/p/user-guide/ MrDoc 可以创建各类私有化部署的文档应用。你可以使用它进行知识管理、构建团队文库、制作产品手册以及在线教程等。 Mr…

Grpc项目集成到java方式调用实践

背景&#xff1a;由于项目要对接到grcp 的框架&#xff0c;然后需要对接老外的东西&#xff0c;还有签名和证书刚开始没有接触其实有点懵逼。 gRPC 是由 Google 开发的高性能、开源的远程过程调用&#xff08;RPC&#xff09;框架。它建立在 HTTP/2 协议之上&#xff0c;使用 …

MySQL的一行数据是如何存储的?

目录 1.COMPACT 行格式长什么样&#xff1f; 例子1&#xff1a;用户设置了主键值&#xff0c;列都是not null的。(默认字符集是utf8mb4,在这种情况下&#xff0c;char(N)类型就不是定长的了&#xff09; 例子2&#xff1a;没有设置主键&#xff0c;也没有唯一索引&#xff0…

【间说八股】面试官:我看你这里用到了模板模式?你能不能说一下什么是模板模式

模板模式 行为模式&#xff1a;这类模式负责对象间的高效沟通和职责委派。 模板方法模式是一种行为设计模式&#xff0c; 它在超类中定义了一个算法的框架&#xff0c; 允许子类在不修改结构的情况下重写算法的特定步骤。 模板方法模式是一种行为设计模式&#xff0c;其核心思想…

【【C语言简单小题学习-1】】

实现九九乘法表 // 输出乘法口诀表 int main() {int i 0;int j 0;for (i 1; i < 9; i){for (j 1; j < i;j)printf("%d*%d%d ", i , j, i*j);printf("\n"); }return 0; }猜数字的游戏设计 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdi…

【STK】手把手教你利用STK进行仿真-STK软件基础02 STK系统的软件界面02 STK的主菜单

STK系统的菜单工具栏包含9个标准的下拉菜单&#xff0c;菜单项分别为“File”&#xff08;文件&#xff09;、“Edit”&#xff08;编辑&#xff09;、“Insert”&#xff08;插入&#xff09;、“View”&#xff08;查看&#xff09;、“Scenario”&#xff08;场景&#xff0…

文件操作和IO(2):Java中操作文件

目录 一、File的属性 二、File的构造方法 三、File的方法 四、代码示例 1、getName&#xff0c;getParent&#xff0c;getPath方法 2、getAbsolutePath&#xff0c;getCanonicalPath方法 3、exists&#xff0c;isDirectory&#xff0c;createNewFile方法 4、createNewF…