当前位置:网站首页>力扣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;
}
}
边栏推荐
猜你喜欢
涨薪5K必学高并发核心编程,限流原理与实战,分布式计数器限流
(十六)51单片机——红外遥控
RNA-ATTO 390|RNA-ATTO 425|RNA-ATTO 465|RNA-ATTO 488|RNA-ATTO 495|RNA-ATTO 520近红外荧光染料标记核糖核酸RNA
【微信小程序2】事件传参与数据同步[03]
Hinton2022年RobotBrains访谈记录
花 30 美金请 AI 画家弄了个 logo,网友:画得非常好,下次别画了!
高效目标检测:动态候选较大程度提升检测精度(附论文下载)
告诉你0基础怎么学好游戏建模?
数学之美 第六章——信息的度量和作用
汉源高科8光口12电口交换机千兆8光8电12电16电网管型工业以太网交换机
随机推荐
Go语言类型与接口的关系
Pytorch GPU 训练环境搭建
不知道这4种缓存模式,敢说懂缓存吗?
高并发,你真的理解透彻了吗?
Go语言为任意类型添加方法
FreeRTOS Intermediate
头条服务端一面经典10道面试题解析
演讲议题及嘉宾重磅揭晓,TDengine 开发者大会推动数据技术“破局”
亚马逊云科技 Build On 2022 - AIot 第二季物联网专场实验心得
149. 直线上最多的点数-并查集做法
使用 ReportLab 绘制 PDF
染料修饰核酸RNA|[email protected] 610/[email protected] 594/Alexa 56
【微信小程序2】事件传参与数据同步[03]
盘点在线帮助中心对企业能够起到的作用
JMeter笔记5 |Badboy使用和录制
tRNA-m5C转运RNA(tRNA)修饰5-甲基胞嘧啶(m5C)|tRNA修饰m1Am2A (2-methyladenosine)
危化企业双重预防机制数字化建设进入全面实施阶段
LeetCode 622. 设计循环队列
华为设备配置VRRP负载分担
2022 CCF中国开源大会会议通知(第三轮)