当前位置:网站首页>707、设计链表(链表)
707、设计链表(链表)
2022-04-23 10:12:00 【Popuessing's Jersey】
题目:
在链表类中实现这些功能:
- get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。
- addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
- addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
- addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。
- deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。
public class Shejilianbiao {
//定义链表
static class ListNode{
int val; //数据:节点数据
ListNode next; //对象:引用下一个数据对象
//定义构造方法
ListNode(int val){
this.val = val;
}
}
static class MyLinkedList{
//size存储链表元素的个数
int size;
//虚拟头节点
ListNode head;
//初始化链表
public MyLinkedList(){
size = 0;
head = new ListNode(0);
}
//获取第index个节点的数值
public int get(int index){
//如果index非法,返回-1
if(index< 0 || index>=size){
return -1;
}
ListNode currentNode = head;
//使用for循环,查找第(index+1)个节点
for (int i = 0; i <=index ; i++) {
currentNode = currentNode.next;
}
return currentNode.val;
}
//在链表最前面插入一个节点
public void addAtHead(int val){
addAtIndex(0,val);
}
//在链表的最后插入一个节点
public void addAtTail(int val){
addAtIndex(size,val);
}
//在第index个节点之前插入一个新节点,例如index为0,那么新插入的节点为链表的新头节点。
//如果index等于链表的长度,则说明是新插入的节点为链表的尾结点
//如果index大于链表的长度,则返回空
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 add = new ListNode(val);
//插入节的指针指向前一个节点的下一个节点
add.next = pre.next;
//前一个节点指向插入节点
pre.next = add;
}
//删除第index个节点
public void deleteAtIndex(int index){
//如果index超出范围,返回空
if(index < 0 || index >=size ){
return;
}
//删除节点,总的长度减一
size--;
ListNode pre = head;
for (int i = 0; i <index ; i++) {
pre = pre.next;
}
pre.next = pre.next.next;
}
}
public static void main(String[] args) {
MyLinkedList myLinkedList = new MyLinkedList();
myLinkedList.addAtHead(1);
myLinkedList.addAtTail(3);
myLinkedList.addAtIndex(1,2);
int x = myLinkedList.get(1);
myLinkedList.deleteAtIndex(1);
int y = myLinkedList.get(1);
System.out.println(x+","+y);
}
}
输出结果:
2,3
版权声明
本文为[Popuessing's Jersey]所创,转载请带上原文链接,感谢
https://blog.csdn.net/CoCo629vanilla/article/details/121408795
边栏推荐
- 《Redis设计与实现》
- Odoo 服务器搭建备忘
- CSP认证 202203-2 出行计划(多种解法)
- 域名和IP地址的联系
- 2022茶艺师(初级)考试试题模拟考试平台操作
- Realize data value through streaming data integration (3) - real-time continuous data collection
- Zhengda international explains what the Dow Jones industrial index is?
- Go语言实践模式 - 函数选项模式(Functional Options Pattern)
- SQL tuning series - SQL performance methodology
- 【无标题】
猜你喜欢
随机推荐
Operation of 2022 tea artist (primary) test question simulation test platform
第二章 In-Memory 体系结构 (IM-2.2)
JUC concurrent programming 06 -- in-depth analysis of AQS source code of queue synchronizer
Sim Api User Guide(6)
Go language practice mode - functional options pattern
Using multithreading to output abc10 times in sequence
Realize data value through streaming data integration (1)
通过流式数据集成实现数据价值(5)- 流分析
Zhengda international explains what the Dow Jones industrial index is?
Custom login failure handling
Go language practice mode - functional options pattern
Solve the problem of installing VMware after uninstalling
杰理之通常程序异常情况有哪些?【篇】
Realize data value through streaming data integration (3) - real-time continuous data collection
[2020wc Day2] F. Clarice picking mushrooms (subtree and query, light and heavy son thought)
第二章 Oracle Database In-Memory 体系结构(上) (IM-2.1)
计算机网络安全实验二|DNS协议漏洞利用实验
Chapter I Oracle database in memory related concepts (Continued) (im-1.2)
2022年制冷与空调设备运行操作考试练习题及模拟考试
[untitled]








