当前位置:网站首页>力扣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;
}
}
边栏推荐
- Jingdong cloud released a new generation of distributed database StarDB 5.0
- 「学习笔记」高斯消元
- Pytorch GPU 训练环境搭建
- 【微信小程序2】事件传参与数据同步[03]
- 开源生态研究与实践| ChinaOSC
- PHP according to the longitude and latitude calculated distance two points
- NNLM、RNNLM等语言模型 实现 下一单词预测(next-word prediction)
- charles配置客户端请求全部不走缓存
- 钱江摩托某型号产品ECU货不对版 消费者知情权应如何保障?
- redis常用命令,HSET,XADD,XREAD,DEL等
猜你喜欢

亚马逊云科技 Build On 2022 - AIot 第二季物联网专场实验心得

一种能有效缓解环境噪声对音频质量干扰的方案

Shell programming loop statement

华为设备配置VRRP负载分担

【飞控开发高级教程3】疯壳·开源编队无人机-定高、定点、悬停

tRNA甲基化偶联3-甲基胞嘧啶(m3C)|tRNA-m3C (3-methylcy- tidine)

入门3D建模基础教程详细分解

信使mRNA甲基化偶联3-甲基胞嘧啶(m3C)|mRNA-m3C

Reveal how the five operational management level of hundreds of millions of easily flow system

边缘盒子+时序数据库,美的数字化平台 iBuilding 背后的技术选型
随机推荐
Detailed AST abstract syntax tree
友宏医疗与Actxa签署Pre-M Diabetes TM 战略合作协议
钱江摩托某型号产品ECU货不对版 消费者知情权应如何保障?
MapReduce介绍及执行过程
【飞控开发高级教程3】疯壳·开源编队无人机-定高、定点、悬停
Go语言类型与接口的关系
盘点在线帮助中心对企业能够起到的作用
LeetCode 1374. 生成每种字符都是奇数个的字符串
RNA-ATTO 390|RNA-ATTO 425|RNA-ATTO 465|RNA-ATTO 488|RNA-ATTO 495|RNA-ATTO 520近红外荧光染料标记核糖核酸RNA
LeetCode 622. Designing Circular Queues
百利药业IPO过会:扣非后年亏1.5亿 奥博资本是股东
Node version switching tool NVM and npm source manager nrm
机器学习中专业术语的个人理解与总结(纯小白)
NNLM、RNNLM等语言模型 实现 下一单词预测(next-word prediction)
Teach you to locate online MySQL slow query problem hand by hand, package teaching package meeting
「游戏建模干货」建模大师几步操作,学习经典,赶紧脑补一下吧
Alexa染料标记RNA核糖核酸|RNA-Alexa 514|RNA-Alexa 488|RNA-Alexa 430
【leetcode】剑指 Offer II 007. 数组中和为 0 的三个数(双指针)
Benchmarking Lane-changing Decision-making for Deep Reinforcement Learning
xss.haozi练习通关详解