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

网页设计视频网站织梦网站后台网址

网页设计视频网站,织梦网站后台网址,大学生创业服务网站建设方案,北京西站进站最新规定全部题目来自力扣,这里只做学习的记录,内容中部分为AI生成,有不对的地方可以评论或者私信哦~~ 707. 设计链表 一、算法逻辑(每一步通顺讲解思路) 🔹 1. 初始化链表结构 构造函数中引入一个哨兵节点&…

全部题目来自力扣,这里只做学习的记录,内容中部分为AI生成,有不对的地方可以评论或者私信哦~~

707. 设计链表

一、算法逻辑(每一步通顺讲解思路)

🔹 1. 初始化链表结构

  • 构造函数中引入一个哨兵节点(dummy head),它不存储实际数据,仅用于简化头部操作;

  • 设置一个成员变量 size 来记录链表当前长度,便于判断索引合法性并优化操作逻辑。


🔹 2. 获取值 get(index)

  • 判断索引是否合法(0 <= index < size),越界返回 -1;

  • 从头节点开始遍历 index 步,定位到目标节点;

  • 返回该节点的值。


🔹 3. 在头部插入 addAtHead(val)

  • dummy_head 后插入一个新节点,指向原来的头节点;

  • 更新链表长度 size += 1

  • 插入时间复杂度为 O(1)。


🔹 4. 在尾部插入 addAtTail(val)

  • dummy_head 开始一路遍历到尾节点(current.next is None);

  • 在尾部追加新节点;

  • 插入时间复杂度为 O(n),因为需要遍历整个链表。


🔹 5. 任意位置插入 addAtIndex(index, val)

  • 插入位置合法条件:0 <= index <= size,注意 == 合法是因为允许尾插;

  • 遍历到第 index-1 个节点,完成插入;

  • 插入时间复杂度为 O(index),最坏为 O(n)。


🔹 6. 删除指定位置节点 deleteAtIndex(index)

  • 删除位置合法条件:0 <= index < size

  • 遍历到第 index-1 个节点,让它 next 指向 index+1 节点,即跳过当前节点;

  • 删除时间复杂度为 O(index),最坏为 O(n)。


二、核心点总结

哨兵节点 + size记录 + 链式结构 + O(n)遍历插删 是这类链表题目的核心构建思路。

  • ✅ 哨兵节点(dummy node)避免对头节点操作的特殊判断;

  • ✅ 使用 size 记录链表长度,快速判断边界合法性;

  • ✅ 所有插入、删除都通过“遍历到前一节点”来操作;

  • ✅ 遵循单链表结构特性,无随机访问能力。

(版本一)单链表法
class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextclass MyLinkedList:def __init__(self):self.dummy_head = ListNode()self.size = 0def get(self, index: int) -> int:if index < 0 or index >= self.size:return -1current = self.dummy_head.nextfor i in range(index):current = current.nextreturn current.valdef addAtHead(self, val: int) -> None:self.dummy_head.next = ListNode(val, self.dummy_head.next)self.size += 1def addAtTail(self, val: int) -> None:current = self.dummy_headwhile current.next:current = current.nextcurrent.next = ListNode(val)self.size += 1def addAtIndex(self, index: int, val: int) -> None:if index < 0 or index > self.size:returncurrent = self.dummy_headfor i in range(index):current = current.nextcurrent.next = ListNode(val, current.next)self.size += 1def deleteAtIndex(self, index: int) -> None:if index < 0 or index >= self.size:returncurrent = self.dummy_headfor i in range(index):current = current.nextcurrent.next = current.next.nextself.size -= 1

三、时间复杂度分析(每个函数)

操作时间复杂度
get(index)O(index)
addAtHeadO(1)
addAtTailO(n)
addAtIndexO(index)
deleteAtIndexO(index)


四、空间复杂度分析

  • 所有节点是动态创建的,除了链表本身存储的数据,没有额外结构;

  • 所以空间开销仅为链表节点本身:

空间复杂度:O(n),其中 n 为链表中元素个数。


✅ 总结一句话

这段代码通过使用哨兵头节点 + 封装常用操作 + 控制链表长度,使得链表插入、删除操作逻辑清晰简洁,是典型的单链表构建方式。核心在于“结构辅助 + 链式操作 + 边界控制”

补充,仅供参考:(版本二)双链表法

(版本二)双链表法
class ListNode:def __init__(self, val=0, prev=None, next=None):self.val = valself.prev = prevself.next = nextclass MyLinkedList:def __init__(self):self.head = Noneself.tail = Noneself.size = 0def get(self, index: int) -> int:if index < 0 or index >= self.size:return -1if index < self.size // 2:current = self.headfor i in range(index):current = current.nextelse:current = self.tailfor i in range(self.size - index - 1):current = current.prevreturn current.valdef addAtHead(self, val: int) -> None:new_node = ListNode(val, None, self.head)if self.head:self.head.prev = new_nodeelse:self.tail = new_nodeself.head = new_nodeself.size += 1def addAtTail(self, val: int) -> None:new_node = ListNode(val, self.tail, None)if self.tail:self.tail.next = new_nodeelse:self.head = new_nodeself.tail = new_nodeself.size += 1def addAtIndex(self, index: int, val: int) -> None:if index < 0 or index > self.size:returnif index == 0:self.addAtHead(val)elif index == self.size:self.addAtTail(val)else:if index < self.size // 2:current = self.headfor i in range(index - 1):current = current.nextelse:current = self.tailfor i in range(self.size - index):current = current.prevnew_node = ListNode(val, current, current.next)current.next.prev = new_nodecurrent.next = new_nodeself.size += 1def deleteAtIndex(self, index: int) -> None:if index < 0 or index >= self.size:returnif index == 0:self.head = self.head.nextif self.head:self.head.prev = Noneelse:self.tail = Noneelif index == self.size - 1:self.tail = self.tail.previf self.tail:self.tail.next = Noneelse:self.head = Noneelse:if index < self.size // 2:current = self.headfor i in range(index):current = current.nextelse:current = self.tailfor i in range(self.size - index - 1):current = current.prevcurrent.prev.next = current.nextcurrent.next.prev = current.prevself.size -= 1# Your MyLinkedList object will be instantiated and called as such:
# obj = MyLinkedList()
# param_1 = obj.get(index)
# obj.addAtHead(val)
# obj.addAtTail(val)
# obj.addAtIndex(index,val)
# obj.deleteAtIndex(index)

文章转载自:

http://a7blu1MN.fpngg.cn
http://xQvmnKiw.fpngg.cn
http://AKFwxX0K.fpngg.cn
http://7vPNJC2P.fpngg.cn
http://TP47ivHZ.fpngg.cn
http://485u0O98.fpngg.cn
http://JcWqEhQL.fpngg.cn
http://yuZFY7gF.fpngg.cn
http://fLn1gJWW.fpngg.cn
http://40UcGAJM.fpngg.cn
http://n4DGbD9o.fpngg.cn
http://Qcyhouwf.fpngg.cn
http://5aWgXjv1.fpngg.cn
http://mk2ZtQA3.fpngg.cn
http://iNtaJHcr.fpngg.cn
http://GenJVEao.fpngg.cn
http://u4eZu4Re.fpngg.cn
http://pf3nHvyd.fpngg.cn
http://OjPvPdyL.fpngg.cn
http://PCJ91F98.fpngg.cn
http://8yhAvbIM.fpngg.cn
http://AkapeMDI.fpngg.cn
http://ViLhGDox.fpngg.cn
http://2foTLH9w.fpngg.cn
http://aynLckA7.fpngg.cn
http://CPVVf8aO.fpngg.cn
http://kvt0XD8S.fpngg.cn
http://60cfiACc.fpngg.cn
http://kw6IJmL8.fpngg.cn
http://h4vwrgaj.fpngg.cn
http://www.dtcms.com/wzjs/682436.html

相关文章:

  • 做空比特币网站公共信息服务平台
  • 内外外贸购物网站建设亿藤互联网站建设开发
  • 淘宝网站建设类目网站的建设包括
  • 更适合企业网站建设的cms系统银川建设厅网站
  • 长长沙网站制作打电话给客户怎样介绍自己是做网站的?开场白?
  • 中科院网站做的好的院所网站二级目录怎么做
  • 个人网站注册平台要多少钱网站蜘蛛爬行统计
  • 企业网站搜索优化外什么是网络营销的技术
  • 直播网站可以做毕设吗wordpress 内容 主题
  • 网站建设哪聊天网站站怎么做
  • 做一回最好的网站宁波品牌网站设计特点
  • 域名注册了 如何做网站动画制作专业
  • 网站建设相关图片手机网站cms
  • 深圳做网站开发四川省建设行业数据共享平台官网
  • 肇庆高要建设局网站商务卫士包括网站建设
  • 网站统计插件网站模板内容怎么添加图片
  • 视频变成网站怎么做的名词解释搜索引擎优化
  • 哪个建站系统好网站整体设计流程
  • 加盟网站推广公司网站维护价格表2023
  • 对网站开发流程的认识漳州最具口碑的网站建设
  • 广州市建设厅官方网站帮人家做家务的网站
  • 杭州哪家做企业网站网站建设与管理升学就业方向
  • 手游网站源码下载如何做好高端品牌网站建设
  • 音乐在线制作网站网站开发部门结构
  • 网站制作前景织梦网站创建商品栏目
  • wordpress hestia网站内容如何优化
  • 网站建设管理成本估计百度发广告需要多少钱
  • 家装设计网站大全云服务器价格
  • 河北省城乡与建设厅网站成都网站建设专家
  • 湖北省网站备案最快几天厦门新闻头条最新消息