当前位置:网站首页>力扣707-设计链表——链表
力扣707-设计链表——链表
2022-08-03 20:03:00 【张怼怼√】
题目描述
设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性: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 个节点。
解题思路
addAtTail(val) 和 addAtHead(val) 都可以由函数 addAtIndex(index,val) 实现。
输入输出示例
代码
class ListNode{
int val;
ListNode next;
ListNode(){}
ListNode(int val){
this.val = val;
}
}
class MyLinkedList {
int size;
ListNode head;
public MyLinkedList() {
size = 0;
head = new ListNode(0);
}
//获取第index个节点
public int get(int index) {
if(index < 0 || index >= size){
return -1;
}
ListNode cur = head;
for(int i = 0; i <= index; i++){
cur = cur.next;
}
return cur.val;
}
//在链表最前面插入一个节点
public void addAtHead(int val) {
addAtIndex(0,val);
}
//在链表最后一个位置插入一个节点
public void addAtTail(int val) {
addAtIndex(size,val);
}
//在index处插入节点val
public void addAtIndex(int index, int val) {
if(index > size) return;
if(index < 0) index = 0;
size++;
ListNode pre = head;
for(int i = 0; i < index; i++){
pre = pre.next;
}
ListNode toAdd = new ListNode(val);
toAdd.next = pre.next;
pre.next = toAdd;
}
//删除第index个节点
public void deleteAtIndex(int index) {
if(index < 0 || index >= size) return;
ListNode pre = head;
size--;
for(int i = 0; i < index; i++){
pre = pre.next;
}
pre.next = pre.next.next;
}
}
边栏推荐
- 边缘盒子+时序数据库,美的数字化平台 iBuilding 背后的技术选型
- 染料修饰核酸RNA|[email protected] 610/[email protected] 594/Alexa 56
- LeetCode 622. Designing Circular Queues
- 转运RNA(tRNA)甲基化修饰7-甲基胞嘧啶(m7C)|tRNA-m7G
- 不知道这4种缓存模式,敢说懂缓存吗?
- Benchmarking Lane-changing Decision-making for Deep Reinforcement Learning
- Teach you to locate online MySQL slow query problem hand by hand, package teaching package meeting
- FreeRTOS Intermediate
- 刷题错题录1-隐式转换与精度丢失
- 若依集成browscap读取浏览器用户代理
猜你喜欢
涨薪5K必学高并发核心编程,限流原理与实战,分布式计数器限流
百利药业IPO过会:扣非后年亏1.5亿 奥博资本是股东
头条服务端一面经典10道面试题解析
Interview Blitz: What Are Sticky Packs and Half Packs?How to deal with it?
Line the last time the JVM FullGC make didn't sleep all night, collapse
小马智行起诉擎天智卡:索赔6000万 彭军称要斗争到底
调用EasyCVR云台控制接口时,因网络延迟导致云台操作异常该如何解决?
倒计时2天,“文化数字化战略新型基础设施暨文化艺术链生态建设发布会”启幕在即
149. 直线上最多的点数-并查集做法
tRNA修饰2-甲基胞嘧啶(m2C)|tRNA修饰m2G (N2-methylguanosine)
随机推荐
Detailed demonstration pytorch framework implementations old photo repair (GPU)
嵌入式分享合集27
边缘盒子+时序数据库,美的数字化平台 iBuilding 背后的技术选型
基础软件与开发语言开源论坛| ChinaOSC
入门3D建模基础教程详细分解
php根据两点经纬度计算距离
【微信小程序2】事件传参与数据同步[03]
利用net-snmp的库实现snmpget,snmpset
高效目标检测:动态候选较大程度提升检测精度(附论文下载)
建模该从哪一步开始?给你分析,给零基础的你一些学习建议
Matlab paper illustration drawing template No. 42 - bubble matrix diagram (correlation coefficient matrix diagram)
亚马逊云科技 Build On 2022 - AIot 第二季物联网专场实验心得
【飞控开发高级教程4】疯壳·开源编队无人机-360 度翻滚
高并发,你真的理解透彻了吗?
MySQL master-slave, 6 minutes you master!
Go语言类型与接口的关系
php截取中文字符串实例
LeetCode 1374. 生成每种字符都是奇数个的字符串
自定义form表单验证
JWT详解