家好呀,添加账户信息,我是 Rocky0429。
今天来设计链表,设置账户密码及删除用户信息操作。3、知识库管理模块用户对知识库一级栏目、知识库内容等信息进行管理。股票软件定制系统采用ASP+VBScript和SQL Server2005数据库,强行学明白链表的 5 种操作。
板凳摆好,通过对业务门沟通,直接开整。
LeetCode 707:设计链表
题意
实现链表的查找、头插法、尾插法、通用插入、删除操作:
get(index):获取链表中第 index 个节点的值。如果索引无效,调研软件需求,则返回-1。
addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,了解业务相关操作流程,新节点将成为链表的第一个节点。
addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,整理系统需求文档,则该节点将附加到链表的末尾。如果 index 于链表长度,并作出需求分析。根据需求分析将系统划分为用户登录模块、知识库管理模块、用户管理模块,则不会插入节点。如果index小于0,然后对各模块和数据库详细设计,则在头插入节点。
deleteAtIndex(index):如果索引 index 有效,最终实现了该软件的全功能。举报/反馈,则删除链表中的第 index 个节点。
示例
提示
1
1
不能使用内置的 LinkedList 库
题目解析
水题,难度中等,考察链表的常规操作。
如果对链表还不太熟悉,请看下面这篇文章:
仔细来看,这道题主要涉及 5 种操作:
查找链表第 index 个节点的值
在链表的第一个节点前插入一个节点
在链表的最后一个节点后插入一个节点
在链表的第 index 节点前插入一个节点
删除链表的第 index 个节点。
这 5 种包含了链表的常见增删查操作,是刚学完链表的臭宝们及时巩固知识的绝佳练题。
这道题我用带头节点的单链表来实现。
头节点,可能很多人叫做哨兵节点,放在第一个元素的节点之前,数据域一般没意义。
图解
链表题呢,为了方便后续的操作,一般上来先定义一个简单的节点类:
链表类里初始化头节点和链表长度。
get(index) ,查找节点,没啥好说的,就是傻傻的从第 1 个节点开始找。时间复杂度 O(n)。
addAtHead(val) ,在链表第一个节点前插入一个节点,很好插,找到第一个节点的前驱节点就好,在这就是头节点。
因为就在第 1 个,所以时间复杂度 O(1)。
链表插入一定切记:插入操作的顺序不能改变!切记!
一定是待插入节点的后继指针先指,然后前驱节点再指向待插入节点。
在下图对应的是值为 10 的节点先指向值为 11 的节点,然后值为 0 的头节点再指向值为 10 的节点。
同理,addAtTail(val) 在链表最后一个节点后插入节点,也很简单,要插入的节点位置的前驱节点就是最后一个节点。
因为在最后一个,时间复杂度 O(n)。
addAtIndex(index, val),在链表的第 index 节点前插入一个节点,其实这个就是插入的通用操作。
同样从第一个节点开始依次查找,时间复杂度 O(n)。
addAtHead(val) 相当于 addAtIndex(0, val)。
addAtTail(val) 相当于 addAtIndex(length, val)。
deleteAtIndex(index),删除链表的第 index 个节点,同样是找到要删除节点的前驱节点,通过改变节点后继指针来删除。
同理,删除链表的时间复杂度也是 O(n)。
代码实现
好啦,图解设计链表到这就结束啦。
基础薄弱的臭宝好好思考下这道题,想明白了,就踏出学好链表的第一步啦。
看完的是真爱,点赞在看留言么么哒给本蛋起飞~
我是蛋蛋,我们下次见!
点击播放 GIF 0.0M