题目是力扣707,设计链表

题目要求:

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

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

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

#node具有两个属性:val和next
class Node:def __init__(self,val):self.next=Noneself.val=val
#创建单链表
class MyLinkedList:def __init__(self):self.head=Node(0)def length(self) ->int:cur=self.headi=0while cur.next!=None:i+=1cur=cur.nextreturn idef get(self,index:int) -> int:if index>=self.length() or index<0:return -1else:cur=self.headi=0while i<=index:cur=cur.nexti+=1return cur.valdef addAtHead(self,val:int) ->None:new_node=Node(val)cur=self.headif cur.next==None:cur.next=new_nodeelse:new_node.next=cur.next  #指针指向cur.next=new_node  #cur需要指向新的头节点def addAtTail(self,val:int) ->None:new_node=Node(val)cur=self.headwhile cur.next!=None:cur=cur.nextcur.next=new_nodedef addAtIndex(self,index:int,val:int) ->None:if index>self.length():returnelif index<0:self.addAthead(val)elif index==self.length():self.addAtTail(val)else:cur=self.headnew_node=Node(val)i=0while i<index:i+=1cur=cur.nextnew_node.next=cur.nextcur.next=new_nodedef deleteAtIndex(self,index:int)->None:if index>=self.length() or index<0:returnelse:cur=self.headi=0pre=self.headwhile i<=index:   #这里必须用pre节点,可以看下图没有用pre节点的情况,是不能删除节点的pre=curcur=cur.nexti+=1pre.next=cur.nextcur.next=None

删除指定index的节点元素,必须使用pre,一个cur是不够的,如果只是用cur,在删除节点时候会出现以下这种情况:

如果加入了pre节点,就可以删除了

142 环形链表

题目要求:

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

class Solution:def detectCycle(self, head: ListNode) -> ListNode:slow,fast=head,headwhile fast and fast.next:  #由于fast走的快,因此判断fast和fast.next不为空即可fast=fast.next.nextslow=slow.nextif fast==slow:    找到相遇点index1=fast# index1=slowindex2=headwhile index1!=index2:index1=index1.nextindex2=index2.nextreturn index1#return index2 也行

【数据结构】leetcode707:python实现链表设计;leetcode142:环形链表相关推荐

  1. leetcode142. 环形链表 II

    leetcode142. 环形链表 II 题目描述 链接: leetcode142. 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整 ...

  2. 代码随想录Day04 | LeetCode24. 两两交换链表中的节点、LeetCode19. 删除链表的倒数第N个节点、LeetCode160. 链表相交、LeetCode142. 环形链表Ⅱ

    LeetCode24. 两两交换链表中的节点 力扣题目链接 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 ...

  3. 数据结构 02 - 单链表的使用 环形链表的实现与应用

    一.单链表的使用 1.链表 定义:链表是有序的列表 关键点:链表是学树和图的基础 特点: (1)链表是以节点的方式来存储的,即所谓的链式存储 (2)每个节点包含data域和next域,后者的作用是指向 ...

  4. 【Leetcode】拿捏链表(四)——160. 相交链表、141. 环形链表、142. 环形链表 II

    作者:一个喜欢猫咪的的程序员 专栏:<Leetcode> 喜欢的话:世间因为少年的挺身而出,而更加瑰丽.                                  --<人民 ...

  5. 数据结构 - 链表(单向环形链表)(约瑟夫问题)

    问题如下(与分析) 构建思路 输入一个数,数到这个数的小孩出圈,出圈顺序的思路 代码实现 根据图解,来一步一步实现 //根据用户输入,计算小孩出圈顺序/**** @param startNo 表示从第 ...

  6. Leetcode--142. 环形链表Ⅱ

    给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...

  7. leetcode-142 环形链表II

    给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...

  8. 【数据结构与算法】之深入解析“环形链表II”的求解思路与算法示例

    一.题目要求 给定一个链表的头节点 head ,返回链表开始入环的第一个节点,如果链表无环,则返回 null. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环.为了表示 ...

  9. leetcode142 环形链表II

    给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...

  10. c语言单链表设计报告,单链表实验报告

    <数据结构>实验报告二 分校: 学号: 日期: 班级: 姓名: 程序名: L2311.CPP 一.上机实验的问题和要求: 单链表的查找.插入与删除.设计算法,实现线性结构上的单链表的产生以 ...

最新文章

  1. cocoJS配置文件:project.json
  2. python数据分析入门学习笔记儿
  3. 数据恢复错误卡住 linux,如何处理ORA-00376错误的恢复问题
  4. mybatis笔记之使用Mapper接口注解
  5. 成功解决3dmax三维建模过程中,视口中不显示贴图但渲染时显示
  6. Unity3D--学习太空射击游戏制作(四)
  7. apache 服务器的 Option Indexes,AllowOverride,Order Allow,Deny 详解
  8. cms32L051 掉电深度睡眠的唤醒
  9. 小程序和钉钉发版后老版缓存的问题调研
  10. 手机计算机隐藏,手机计算机自带的隐藏功能,我也是现在才知道,功能比你想得多...
  11. 如何注册公司邮箱?公司邮箱邮件这样写98%的人都爱看
  12. 谁会成为印度版微信?
  13. win10:谷歌浏览器如何导出扩展程序
  14. CAMP模型——估计资本成本的模型
  15. mfc使用键盘加速键
  16. Webpack搭建本地服务器
  17. CRC16-XMODEM 计算方法 | C语言实现
  18. 数学建模——种群竞争模型
  19. Popcap Framework 一个游戏框架(c++)
  20. 编程入门:什么是前端和后端?区别有3点

热门文章

  1. 2.4g和5g要不要合并_路由器2.4g和5g双频合一好还是分开好
  2. 【macOS】重装mac系统手把手教学
  3. 小米的服务器地址怎么修改,小米无线路由器IP地址怎么修改
  4. span标签设置大小
  5. 对于pdf转图片linux乱码的解决
  6. 一个人能不能月薪过万,放个小长假就知道了
  7. 延迟秋招总结,什么工作可以月薪过万?
  8. 《线粒体疾病的遗传》学习笔记
  9. Nginx配置https及证书
  10. android studio在夜神上打开_android studio 使用夜神模拟器 开发调试