当前位置: 首页 > 编程日记 > 正文

leetcode--链表的设计--python

leetcode--链表的设计--python

  • 题目
    • 题目详情
    • 示例
    • 提示
  • 解题代码
    • 代码
    • 运行结果
  • 体会

题目

设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。

题目详情

在链表类中实现这些功能:

  1. get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。
  2. addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
  3. addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
  4. addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。
  5. deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。

示例

MyLinkedList linkedList = new MyLinkedList();
linkedList.addAtHead(1);
linkedList.addAtTail(3);
linkedList.addAtIndex(1,2);   //链表变为1-> 2-> 3
linkedList.get(1);            //返回2
linkedList.deleteAtIndex(1);  //现在链表是1-> 3
linkedList.get(1);            //返回3

提示

  • 所有值都在 [1, 1000] 之内。
  • 操作次数将在 [1, 1000] 之内。
  • 请不要使用内置的 LinkedList 库。

解题代码

代码

class Node():def __init__(self,value):self.value = valueself.next = Noneclass LinkedList(object):def __init__(self):self.head = Node(-1)def create(self,list):        #创建链表,给链表赋值head = self.headfor i in list:node = Node(i)if head.value == -1:self.head = nodehead.next = nodehead = head.nextdef get_length(self):         #获取连链表的总长度head = self.headlength = 0while head is not None:head = head.nextlength += 1return lengthdef get(self,index):           #输入索引,获取其中的值,index从0开始head = self.headlength = self.get_length()init_index = 0if (index < 0) or (index > length-1): return -1    #判断输入的索引是否有效if index == 0:return head.valuewhile init_index <= index:                     #循环遍历链表,查找正确的索引if (init_index == index):return head.valuehead = head.nextinit_index += 1def addAtHead(self,val):                      #输入值,头插法head = self.headnode = Node(val)if head.value == -1:                     #如果链表为空的状态self.head = nodereturnnode.next = head                        #不为空的时候遍历self.head = nodedef addAtTail(self,val):                   #尾插法head = self.headnode = Node(val)if head.value == -1:                  #空链表时self.head = nodereturnwhile head.next is not None:          #遍历到最后一个元素head = head.nexthead.next = nodedef addAtIndex(self,index,val):          #在任意位置插入head = self.headnode = Node(val)init_index = 0length = self.get_length()if index > 0 and head.value == -1return if index > length or index < 0:     #判断插入的索引是否超长或者不正规print("错误的索引")returnif index == 0:     #头插法相当于(中间还要判断是否为空链表)if head.value == -1:self.head = nodereturnnode.next = headself.head = nodereturnwhile head is not None and init_index <= index:     #判断插入元素后面是否有元素if (init_index == index):node.next = headbefore.next = nodebefore = headhead = head.nextinit_index += 1if head is None and init_index == index:before.next == nodedef delectAtIndex(self,index):     #删除元素head = self.headinit_index = 0length = self.get_length()if index > length-1 or index < 0:print("错误的索引")returnif index == 0:if head.value == -1:print("链表已经为空")return head = head.nextself.head = headreturnwhile head is not None and init_index <= index:  if init_index == index:before.next = head.nextbefore = headhead = head.nextinit_index += 1def printLinked(self):head = self.headwhile head is not None:print(head.value,",",end="")head = head.nextprint("\n")if __name__ == '__main__':obj = LinkedList()list1 = [1,2,3,4,5,6]print("----------------------打印创建的链表---------------------------")obj.create(list1)obj.printLinked()print("----------------------打印加入头节点的链表---------------------------")obj.addAtHead(1)obj.printLinked()print("----------------------打印加入尾节点的链表---------------------------")obj.addAtTail(6)obj.printLinked()print("----------------------打印加入中间节点的链表---------------------------")obj.addAtIndex(0,4)obj.printLinked()print("----------------------打印删除的任意中间节点的链表---------------------------")obj.delectAtIndex(9)obj.printLinked()

运行结果

在这里插入图片描述

体会

在写的过程中会遇到很多问题,比如说临界值的问题,判断index是否合格,或者链表的插入是头插还是尾插,一句话,光看是发现不了问题的,只有自己动手做才会有更大的收获。

相关文章:

从空间数据库中删除所有拓扑对象

/// <summary> /// //从空间数据库中删除所有拓扑对象 /// </summary> /// <returns></returns> public bool DeleteALLTopolgyFromGISDB() { bool rbc true; try { …

Altium Desgner软件,PCB设计中铺铜的作用

PS原文出自http://mp.weixin.qq.com/s/5mLNXzCDm1hGOXiKNE8Ddg 问1:为何要铺铜&#xff1f; 答&#xff1a;一般铺铜有几个方面原因。 &#xff11;、EMC.对于大面积的地或电源铺铜&#xff0c;会起到屏蔽作用&#xff0c;有些特殊地&#xff0c;如PGND起到防护作用。&#xff…

如何利用自组织竞争网络进行患者癌症发病预测

如何利用自组织竞争网络进行患者癌症发病预测 数据下载&#xff1a; http://download.csdn.net/detail/lsgo_myp/9711473

leetcode--反转链表--python

文章目录题目题目详情示例提示解题代码代码运行结果体会题目 题目详情 反转一个单链表。 示例 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL提示 你可以迭代或递归地反转链表。你能否用两种方法解决这道题&#xff1f; 解题代码 …

非递归一次性加载分类数据到TreeViw

不是经常用,发现再次用到时又要再写一遍,这次花点时间记录一下 代码:------------------------------------- private void InitView() { DataView dv CommodityClassBLL.Query().Tables[0].DefaultView; if (dv.Count > 1) { dv.Sort …

什么是SESSION?(二)

本篇图文讨论了SESSION多服务器共享问题以及SESSION操作的效率问题。本篇微信图文由钟锦提供。

leetcode--两数之和--python

文章目录题目题目详情示例解题代码代码运行结果体会题目 题目详情 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;你不能重复…

关于 OpenIdConnect 认证启用 HTTPS 回调 RedirectUri 不生效问题

在搭建 IdentityServer 服务端后&#xff0c;我们尝试使用了 OIDC(OpenID Connect) 的中间件来代替了原先的 Session 系统认证方式&#xff0c;起初采用的是 HTTP 协议&#xff0c;一切都没有什么问题&#xff0c;最近启用全站 HTTPS 后&#xff0c;发现登陆会跳转到 HTTP的页面…

C#中使用GUID

GUID&#xff08;全局统一标识符&#xff09;是指在一台机器上生成的数字&#xff0c;它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成GUID的API。生成算法很有意思&#xff0c;用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。GUID的唯一缺陷在于生…

Matlab与线性代数 -- 对角矩阵

本微信图文详细介绍了Matlab中diag()函数的应用。

leetcode--对称二叉树--python

文章目录题目题目详情示例说明解题代码代码运行结果体会题目 题目详情 给定一个二叉树&#xff0c;检查它是否是镜像对称的。 示例 例如&#xff0c;二叉树 [1,2,2,3,4,4,3] 是对称的。 1/ \2 2/ \ / \ 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1…

IPV6的设置问题!

最近一段在研究IPV6&#xff0c;在网上搜了好多资料&#xff0c;但是感觉大部分都不实在&#xff0c;都是泛泛而谈&#xff0c;实用性不强&#xff0c;故决定做点什么&#xff01;正所谓该出手时就出手&#xff0c;风风火火闯九州哦~~ IPV6设置步骤&#xff1a; 1.首先查看你时…

Matlab与线性代数 -- 数组与矩阵的乘幂

本微信图文详细介绍了数组的乘幂运算power()与矩阵的乘幂运算mpower()。

Docker 公司是如何做社区的?

今天看了一个Docker公司是如何做社区的PPT&#xff0c;演讲者是Docker公司的市场部老大。Docker从发布之初就受到了开发者的关注&#xff0c;1.0版本发布的时候Docker就收到了超过460位贡献者的8741条改进建议&#xff0c;Docker也承认是社区帮助他们迅速达到了这一新的里程碑。…

leetcode--整数反转--python

文章目录题目题目详情示例注意解题代码小知识代码运行结果体会题目 题目详情 给出一个 32 位的有符号整数&#xff0c;你需要将这个整数中每位上的数字进行反转。 示例 输入: 123 输出: 321输入: -123 输出: -321输入: 120 输出: 21注意 假设我们的环境只能存储得下 32 位…

水晶报表调用存储过程的问题

前言&#xff1a;现在碰到了水晶报表调用存储过程的问题&#xff0c;问题是这样的&#xff1a;ERP软件里有很多的数据表&#xff0c;有些报表的字段要从多个数据表里取数据&#xff0c;并且要对数据进行处理&#xff0c;来作为报表的字段&#xff0c;我看了些资料&#xff0c;说…

iOS-ARC_Xcode检测循环引用

iOS-ARC_Xcode检测循环引用 一&#xff0c;在桌面上新建立一个工程&#xff0c;在ViewController.m中输入如下代码&#xff1a; - (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.NSMutableArray *firstArr…

什么是SESSION?(三)

本微信图文通过一个利用数据库的方式存储Session的例子&#xff0c;深入介绍了对Session机制的理解。本微信图文由钟锦提供。

leetcode--回文数--python

文章目录题目题目详情示例解题代码代码运行结果体会题目 题目详情 判断一个整数是否是回文数。回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 示例 输入: 121 输出: true输入: -121 输出: false 解释: 从左向右…

DevXpress 控件: 第一篇: 将 Master_Details 关系进行到底--XtraPivotGridControl控件

一. 控件说明: XtraPivotGridControl&#xff1b;数据控件 二. 控件特点: 1. 支持行, 列字段拖动, 对调 支持行, 列字段的添加, 移除 支持数据字段的添加, 移除, 对调 2. 支持以行, 列字段排序 支持以过滤字段排序 3. 支持行, 列字段过滤 …

JNI与NDK学习第二篇-----应用篇

2019独角兽企业重金招聘Python工程师标准>>> 1.安装配置NDK 1). 解压NDK的zip包到非中文目录(最好英文目录不要带空格) 2). 配置path : 解压后NDK的根目录----->ndk-build 2.给AS关联NDK 1). local.properties中添加配置 ndk.dirE\:\\Android\\sdk\\android-…

数据结构与算法课程的代码链接

VS2005版本 http://download.csdn.net/detail/lsgo_myp/9713329 VS2015版本 http://download.csdn.net/detail/lsgo_myp/9730592

leetcode--字符串转换为整数--python

文章目录题目题目详情说明示例解题代码思路代码运行结果最佳方案题目 题目详情 请你来实现一个 atoi 函数&#xff0c;使其能将字符串转换成整数。 首先&#xff0c;该函数会根据需要丢弃无用的开头空格字符&#xff0c;直到寻找到第一个非空格的字符为止。 当我们寻找到的…

什么是自组织特征映射网络?

什么是自组织特征映射网络&#xff1f;

理解jQuery对象$.html

如果要比喻jQuery和原生javascript的关系&#xff0c;我个人认为是自动档和手动档汽车的区别。使用原生javascript&#xff0c;可以知道离合器以及档位的作用&#xff1b;而使用jQuery&#xff0c;则把离合器和手动档位封装到函数&#xff0c;直接前进、后退或驻车即可。所以&a…

精通ASP.NET中弹出窗口技术

本文讨论如何以ASP.NET中的CodeBehind方式实现各种弹出窗口&#xff0c;实现与弹出窗口的交互。并探讨常用非标准IE浏览器对弹出的窗口的各种过滤行为及使用弹出窗口相应对策&#xff0c;以期给出使用弹出窗口的一个通用较优方案。 关键词&#xff1a;ASP.NET、CodeBehind、过滤…

leetcode--删除排序数组中的重复项--python

文章目录题目题目详情示例说明解题代码思路代码运行结果最佳方案题目 题目详情 给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在原地修改…

转换人民币大小金额

1 usingSystem; 2 3 namespaceTest 4 { 5 /**////<summary>6 ///Rmb 的摘要说明。 7 ///</summary>8 publicclassRmb 9 { 10 /**////<summary>11 ///转换人民币大小金额 12 ///</summary>13 ///<param name"num">金额</param>14…

偏执却管用的 10 条 Java 编程技巧

经过一段时间的编码&#xff08;咦&#xff0c;我已经经历了将近20年的编程生涯&#xff0c;快乐的日子总是过得很快&#xff09;&#xff0c;我们开始感谢那些好习惯。因为&#xff0c;你知道… “任何可能出错的事情&#xff0c;最后都会出错。” 这就是人们为什么喜欢进行“…

如何利用SOM网络进行柴油机故障诊断

如何利用SOM网络进行柴油机故障诊断