链表-基础训练(二)链表 day14

两两交换链表中的节点

题目示意:

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

原先我的思路是图像上的思路,但是我感觉还是很复杂,

思路1:

原代码:
class ListNode:def __init__(self,data=0,next=None):self.value = dataself.next = next
class MylinkList:def __init__(self):self.dummy_head = ListNode()self.size = 0def addAtHead(self,index:int)->None:self.dummy_head = ListNode(index,self.dummy_head.next)self.size += 1def printList(self)->None:current = self.dummy_headwhile current:print(current.value,end = "->" if current.next else "")current = current.nextprint()def swapList(self)->None:if self.size <= 1:print("元素太少不进行翻转")returnelse:current_1 = self.dummy_head.nextcurrent_2 = current_1.nextcurrent_3 = current_2.nextself.dummy_head.next = current_2current_2.next = current_1current_1.next = current_3for i in range(1,self.size // 2):# 更新指针temp = current_1current_2 = current_3.nextcurrent_1 = current_3current_3 = current_2.next# 交换位置temp.next = current_2current_2.next = current_1current_1.next = current_3# 开始调用函数
obj = MylinkList()
obj.addAthead(1)
obj.addAthead(10)
obj.addAthead(2)
obj.addAthead(3)
obj.addAthead(21)
obj.addAthead(4)
obj.addAthead(33)
obj.printList()
obj.swapList()
obj.printList()
报错:

AttributeError: 'NoneType' object has no attribute 'next'

这个报错主要是因为在current_3的时候很可能是空的,所以我们需要修改代码,同时还有一些其他的错误,主要是对代码的掌控能力还不够:

代码修正:
    def addAtHead(self,index:int)->None:self.dummy_head.next = ListNode(index,self.dummy_head.next)self.size += 1

不可以修改头节点

原代码修改后:
class ListNode:def __init__(self,data=0,next=None):self.value = dataself.next = next
class MylinkList:def __init__(self):self.dummy_head = ListNode()self.size = 0def addAtHead(self,index:int)->None:self.dummy_head.next = ListNode(index,self.dummy_head.next)self.size += 1def printList(self)->None:current = self.dummy_headwhile current:print(current.value,end = "->" if current.next else "")current = current.nextprint()def swapList(self)->None:if self.size <= 1:print("元素太少不进行翻转")return# 使用虚拟头结点简化current_1 = self.dummy_headcurrent_2 = current_1.nextcurrent_3 = current_2.nextwhile current_1.next!=None and current_1.next.next!=None:current_2.next = current_3.nextcurrent_3.next = current_2current_1.next = current_3#交换current_1 = current_3current_2 = current_1.next if current_1 else Nonecurrent_3 = current_2.next if current_2 else None# 开始调用函数
obj = MylinkList()
obj.addAtHead(1)
obj.addAtHead(10)
obj.addAtHead(2)
obj.addAtHead(3)
obj.addAtHead(21)
obj.addAtHead(4)
obj.addAtHead(33)
obj.printList()
obj.swapList()
obj.printList()
思路2:
代码:
class ListNode:def __init__(self,data=0,next=None):self.value = dataself.next = nextclass MylinkList:def __init__(self):self.dummy_head = ListNode()self.size = 0def addAtHead(self,index:int)->None:self.dummy_head.next = ListNode(index,self.dummy_head.next)self.size += 1def printList(self)->None:current = self.dummy_headwhile current:print(current.value,end = "->" if current.next else "")current = current.nextprint()def swapList(self)->None:if self.size <= 1:print("元素太少不进行翻转")returncurrent = self.dummy_headtemp_1 = current.nexttemp_2 = temp_1.nextwhile current.next and current.next.next:temp_1.next = temp_2.nexttemp_2.next = temp_1current.next = temp_2current = temp_2 if temp_2 else Nonetemp_1 = current.next if current else Nonetemp_2 = temp_1.next if temp_1 else None# 开始调用
obj = MylinkList()
obj.addAtHead(1),obj.addAtHead(2),obj.addAtHead(3),obj.addAtHead(10)
obj.addAtHead(15),obj.addAtHead(16),obj.addAtHead(20)
obj.printList()
obj.addAtHead(35)
obj.printList()
obj.swapList()
obj.printList()

删除链表的倒数第N个节点

题目示意:

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

进阶思考:

你能尝试使用一趟扫描实现吗?

链表的题建议大家画图来思考:

针对删除的代码:

def deleteN(self,index:int)->None:if index>self.size:print("超出了链表的范围")returnelse:current = self.dummy_headfor i in range(0,index-1):current = current.nextprint(current.next.value)current.next =current.next.nextself.size -= 1

完整的代码:

class ListNode:def __init__(self,data=0,next=None):self.value = dataself.next = nextclass MylinkList:def __init__(self):self.dummy_head = ListNode()self.size = 0def addAtHead(self,index:int)->None:self.dummy_head.next = ListNode(index,self.dummy_head.next)self.size += 1def printList(self)->None:current = self.dummy_head.nextwhile current:print(current.value,end = "->" if current.next else "")current = current.nextprint()def swapList(self)->None:if self.size <= 1:print("元素太少不进行翻转")returncurrent = self.dummy_headtemp_1 = current.nexttemp_2 = temp_1.nextwhile current.next and current.next.next:temp_1.next = temp_2.nexttemp_2.next = temp_1current.next = temp_2current = temp_2 if temp_2 else Nonetemp_1 = current.next if current else Nonetemp_2 = temp_1.next if temp_1 else Nonedef deleteN(self,index:int)->None:if index>self.size:print("超出了链表的范围")returnelse:current = self.dummy_headfor i in range(0,index-1):current = current.nextprint(current.next.value)current.next =current.next.nextself.size -= 1# 开始调用
obj = MylinkList()
obj.addAtHead(1),obj.addAtHead(2),obj.addAtHead(3),obj.addAtHead(10)
obj.addAtHead(15),obj.addAtHead(16),obj.addAtHead(20)
obj.printList()
obj.addAtHead(35)
obj.printList()
obj.swapList()
obj.printList()
obj.deleteN(4)
obj.printList()

链表相交

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交:

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

示例 1:

此题暂时留作思考题,希望大家都思考思考

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

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

相关文章

Unity游戏制作中的C#基础(4)数组声明和使用

一、数组的声明 在 C# 中&#xff0c;声明数组有多种方式&#xff0c;每种方式都有其适用的场景&#xff0c;下面为你逐一详细介绍&#xff1a; 1. 直接初始化声明 这种方式直观且便捷&#xff0c;在声明数组的同时就为其赋初值&#xff0c;让数组从诞生之初就拥有了具体的数据…

【Gin-Web】Bluebell社区项目梳理5:投票功能分析与实现

本文目录 一、投票功能投票流程实现代码redis投票 一、投票功能 投票流程 首先我们要明确&#xff0c;就是 谁&#xff08;哪个用户&#xff1a;userID&#xff09; 给 哪个帖子&#xff08;postID&#xff09; 投了 什么票&#xff08;赞成票or反对票&#xff09;。 赞成票…

XUnity.AutoTranslator-deepseek——调用腾讯的DeepSeek V3 API,实现Unity游戏中日文文本的自动翻译

XUnity.AutoTranslator-deepseek 本项目通过调用腾讯的DeepSeek V3 API&#xff0c;实现Unity游戏中日文文本的自动翻译。 准备工作 1. 获取API密钥 访问腾讯云API控制台申请DeepSeek的API密钥&#xff08;限时免费&#xff09;。也可以使用其他平台提供的DeepSeek API。 …

Python爬虫-批量爬取股票数据猫各股票代码

前言 本文是该专栏的第47篇,后面会持续分享python爬虫干货知识,记得关注。 本文笔者以股票数据猫为例子,基于Python爬虫,批量获取各股票代码数据。 具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。废话不多说,下面跟着笔者直接往下看正文详细内容。(附…

《Keras 3 :使用 Vision Transformers 进行物体检测》:此文为AI自动翻译

《Keras 3 :使用 Vision Transformers 进行物体检测》 作者:Karan V. Dave 创建日期:2022 年 3 月 27 日最后修改时间:2023 年 11 月 20 日描述:使用 Vision Transformer 进行对象检测的简单 Keras 实现。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 介绍 A…

vue-treeselect显示unknown的问题及解决

问题 解决办法 去node-modules包里面找到这个组件的源码&#xff0c;在它dist文件里面找到这个文件&#xff0c;然后搜索unknown&#xff0c;把它删掉就可以解决了。

深入剖析抽象工厂模式:设计模式中的架构利器

深入剖析抽象工厂模式&#xff1a;设计模式中的架构利器 在软件开发领域&#xff0c;设计模式是解决常见问题的通用方案&#xff0c;而抽象工厂模式作为创建型设计模式的重要一员&#xff0c;在构建复杂软件系统时发挥着关键作用。它为创建一系列相关或相互依赖的对象提供了一…

python获取网页内容 靠谱的做法

获取网页内容 response requests.get(url, verifyFalse) 通过这种方式下载网址不太靠谱, 容易出 ssl错误 requests.exceptions.SSLError: HTTPSConnectionPool(hostagri.hainan.gov.cn, port443): Max retries exceeded with url: /hnsnyt/xxgk/gfxwj/index_1.html (Caused by…

MFC中CString的Format、与XML中的XML_SETTEXT格式化注意

1、在MFC中导入 "msxml6.dll"&#xff0c;并使用其中的XML_SETTEXT函数&#xff0c;此调用在进行格式化的时候&#xff0c;调用的还是CString.Format()函数&#xff01; 2、用double类型的数据&#xff0c;格式化整形数%d之前&#xff0c;必须将double强转为int&…

Linux-C-函数栈-SP寄存器

sp&#xff08;Stack Pointer&#xff0c;栈指针&#xff09;是计算机体系结构中一个非常重要的寄存器&#xff0c;下面将详细介绍其作用和原理。 作用 1. 管理栈内存 栈是一种后进先出&#xff08;LIFO&#xff0c;Last In First Out&#xff09;的数据结构&#xff0c;在程…

从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(一)

项目包含5个模块 1.首页 (聊天主页) 2.注册 3.登录 4.个人资料 5.设置主题 一、配置开发环境 建立项目文件夹 mkdir chat-project cd chat-project mkdir server && mkdir webcd server npm init cd web npm create vitelatest 创建前端项目时我们选择javascrip…

深入理解 QObject的作用

QObject 作为 Qt 库中所有对象的基类&#xff0c;其地位无可替代。几乎 Qt 框架内的每一个类&#xff0c;无论是负责构建用户界面的 QWidget&#xff0c;还是专注于数据处理与呈现的 QAbstractItemModel&#xff0c;均直接或间接继承自 QObject。这种继承体系赋予 Qt 类库高度的…

22爬虫:使用Drission Page的两个案例

案例一&#xff1a;使用DrissionPage抓取BOSS上的招聘信息 使用requests获取BOSS网站上的内容是非常困难的&#xff0c;但是通过网页自动化工具DrissionPage或者是Playwright或者是Seleenium是非常容易的&#xff0c;接下来我们就给出使用DrissionPage爬取BOSS网站python招聘的…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_atoi 函数

ngx_atoi 声明在 src/core/ngx_string.h ngx_int_t ngx_atoi(u_char *line, size_t n); 定义在 src/core/ngx_string.c ngx_int_t ngx_atoi(u_char *line, size_t n) {ngx_int_t value, cutoff, cutlim;if (n 0) {return NGX_ERROR;}cutoff NGX_MAX_INT_T_VALUE / 10;cutlim…

具有整合各亚专科医学领域知识能力的AI智能体开发纲要(2025版)

整合各亚专科医学领域知识能力的AI代理的开发与研究 一、引言 1.1 研究背景 在科技飞速发展的当下,人工智能(AI)已成为推动各行业变革的关键力量,医疗领域也不例外。近年来,AI 在医疗行业的应用取得了显著进展,从医学影像诊断到疾病预测,从药物研发到个性化医疗,AI 技…

如何设计app测试用例

功能测试 测试方法&#xff1a;等价类划分法、边界值法、场景法、因果图法。优先级设定&#xff1a;核心业务功能设为高优先级。需求覆盖 正向场景、反向场景、关联接口串场景 与后端开发确认测试用例是否全面覆盖后端逻辑。和产品确认用例是否覆盖本次需求&#xff0c;以及是否…

YOLO11 【四】 【DNF制作自己的数据集,切割视频以及labelimg 闪退问题】

一、问题labelimg 闪退 一点w打标 labelimg就闪退 **原因 &#xff1a; python 版本太高 ** 解决办法&#xff1a;单独创建一个虚拟环境用于打标 conda create -n labelimg python3.9 二、使用python脚本切割视频 # -*- coding: utf-8 -*- import cv2 import osdef video_…

[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction

论文网址&#xff1a;[2401.10134] Spatial-Temporal Large Language Model for Traffic Prediction 论文代码&#xff1a;GitHub - ChenxiLiu-HNU/ST-LLM: Official implementation of the paper "Spatial-Temporal Large Language Model for Traffic Prediction" …

k2路由器登录校园网

教程1刷入Breed&#xff0c;并手动刷入Padavan固件&#xff1a;斐讯K1、K2、K2P 刷机、刷入Breed 辅助工具 | tb (tbvv.net) Padavan下载网址&#xff1a; 我用的是&#xff1a; Padavan 登录的网址是 192.168.123.1 Padavan配置教程&#xff1a; 先用网线连上校园网&#…

多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题

多源 BFS 是一种解决 边权为 1 的多源最短路问题 的高效算法。其核心思想是将所有源点视为一个“超级源点”&#xff0c;通过一次 BFS 遍历即可计算所有节点到最近源点的最短距离。以下从原理、实现和代码示例三个方面深入讲解&#xff1a; 目录 一、原理分析 1. 单源 BFS vs…