在链表类中实现这些功能:

get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。

addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。

addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。

addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。

deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。

package com.lara.springbootconfig.algorithm;

/**

* @author lara

* @date 2020/3/20 17:05

*/

public class MyLinkedList {

private Node head;

private int size;

/**

* Initialize your data structure here.

*/

public MyLinkedList() {

}

/**

* Get the value of the index-th node in the linked list. If the index is invalid, return -1.

*/

public int get(int index) {

if (index > size - 1) {

return -1;

}

Node temp = head;

for (int i = 0; i < index; i++) {

temp = temp.next;

}

return temp.val;

}

/**

* Add a node of value val before the first element of the linked list. After the insertion, the new node will be the first node of the linked list.

*/

public void addAtHead(int val) {

Node cur = new Node(val);

cur.next = head;

head = cur;

size++;

}

/**

* Append a node of value val to the last element of the linked list.

*/

public void addAtTail(int val) {

Node cur = new Node(val);

if (head == null) {

head = cur;

return;

}

Node temp = head;

while (null != temp.next) {

temp = temp.next;

}

temp.next = cur;

size++;

}

/**

* Add a node of value val before the index-th node in the linked list. If index equals to the length of linked list, the node will be appended to the end of linked list. If index is greater than the length, the node will not be inserted.

*/

public void addAtIndex(int index, int val) {

if (index > size) {

return;

}

if (index == 0) {

addAtHead(val);

size++;

return;

}

Node pre = head;

Node cur = pre.next;

for (int i = 1; i < index; i++) {

pre = pre.next;

cur = cur.next;

}

Node add = new Node(val);

add.next = cur;

pre.next = add;

size++;

}

/**

* Delete the index-th node in the linked list, if the index is valid.

*/

public void deleteAtIndex(int index) {

if (index >= 0 && index <= size - 1) {

if (index == 0) {

head = head.next;

size--;

return;

}

Node pre = head;

Node cur = pre.next;

for (int i = 1; i < index; i++) {

pre = pre.next;

cur = cur.next;

}

if (null == cur.next) {

pre.next = null;

} else {

pre.next = cur.next;

}

size--;

}

}

class Node {

private int val;

private Node next;

public Node(int val) {

this.val = val;

}

public int getVal() {

return val;

}

public void setVal(int val) {

this.val = val;

}

public Node getNext() {

return next;

}

public void setNext(Node next) {

this.next = next;

}

}

public void print() {

for (int i = 0; i < this.size; i++) {

System.out.print(this.get(i));

}

System.out.println("--------------");

}

public static void main(String[] args) {

MyLinkedList obj = new MyLinkedList();

obj.addAtHead(1);

obj.print();

obj.addAtTail(3);

obj.print();

obj.addAtIndex(1, 2);

obj.print();

obj.deleteAtIndex(1);

obj.print();

}

}

慢慢长路第一步,算法不能放弃!!!! 最好在力扣网提供的编辑器中自己手写,尝试下没有编译器看看自己还能不能写代码

力扣Java编译器_力扣--设计单链表相关推荐

  1. python力导向图论文_力导向图(关系图) echarts的运用

    Echarts关系图-力引导布局 需要做一个树形图,可以查看各个人员的关系. 可伸缩的力引导图-失败 刚开始,打算做一个可展开和伸缩的,搜索时候发现CSDN有一篇美美哒程序媛写的Echarts For ...

  2. 单链表的合并算法_图解算法:单链表两两反转 | 眼睛会了手就会系列

    一. 序 链表作为一种基本的数据结构,本身理解起来,很简单.它通过指针或者叫引用,将一组零散的内存空间(结点),串联起来组成一个数据存储结构. 链表根据其指针的指向和丰富程度,可以分为单链表.双向链表 ...

  3. 用vb思设计Java编译器_一个简单的VB-VC编译器 - 程序设计(Programming)版 - 北大未名BBS...

    发信人: phoenix (凤凰), 信区: VisualBasic 标  题: 一个简单的VB-VC编译器 发信站: PKU BBS (Thu Jan  6 14:05:52 2000), 转信 V ...

  4. sql2008带扣号字符串_带扣:在您的第一个游戏果酱中创建自己的卡丁车游戏

    sql2008带扣号字符串 The Karting Microgame video game template just got a serious makeover to help new user ...

  5. java适配器模式_适配器模式的设计,你get到了吗?

    作者:rabbitwfly 假如我们又这样软件系统,我们希望它能够和一个新的库搭配使用,但是这个库所提供的接口与我们的软件系统不兼容,我们不想改变现有代码就能解决这个问题,怎么办?这个时候我们就需要将 ...

  6. 力控mysql驱动_力控ADO组件数据源设置

    1.mysql的ODBC驱动如何下载及安装 地址:http://dev.mysql.com/downloads/connector/odbc/5.1.html Mysql跟力控ado进行交互 第一步: ...

  7. iPhone好用的java编译器_华为方舟编译器实测:流畅度果真远超iPhoneXsMAX!

    原标题:华为方舟编译器实测:流畅度果真远超iPhoneXsMAX! ​[手机频道·原创]方舟编译器刚刚发布,荣耀总裁赵明在就发微博称"作为安卓体系的革命性突破,方舟编译器给了我们很多想象和操 ...

  8. JavaScript 凭什么力压 Java、Python 横扫编程语言榜单?

    作为全球知名的开发者社区 GitHub,包括了 Google.Facebook.微软等众多技术巨头都会在这里安营扎寨,而每年 GitHub 都会发布一份 Octoverse 报告,该报告总结了 Git ...

  9. 单链表删除所有值为x的元素_线性表之单链表

    单链表 一种以链接方式存储的线性表,适用于频繁增删操作,存储空间不定的情形. 单链表的一个存储结点包含两个域,数据域和指针域.数据域用于存储线性表的一个数据元素,指针域用于指示下一个结点开始的存储地址 ...

最新文章

  1. ASP.net 2.0中水晶报表迁移部署问题
  2. IBM AIX JFS2文件系统数据恢复技术
  3. JDK源码解析之集合篇2--Collection
  4. 小议IndexedDB中的主要对象
  5. python的就业方向有哪些城市_以就业为目标,Python有哪些方向值得学?
  6. [系统安全] 四十六.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法
  7. IDEA对新建java线程池的建议
  8. python list转map_Python 进阶之术 Map Filter Reduce
  9. 解决在Android Studio 3.2找不到Android Device Monitor工具
  10. python读大文件方法_使用Python读取大文件的方法
  11. 《算法导论》——矩阵乘法的Strassen算法
  12. echarts legend颜色_Canvas专题—综合案例:echarts实现k线图(11)
  13. 动态生成和移除img标签---JavaScript
  14. 小谈暴风影音并给个小建议
  15. 数字图像处理(DIP)作业8 matlab or OpenCV 对lena 图片进行边缘提取
  16. CodeForces - 1526C2
  17. Nova Conductor服务
  18. 从输入网址到收到响应的详细过程
  19. EVE-NG配置静态固定地址
  20. 选中一次格式刷,即可多次使用WPS格式刷的办法

热门文章

  1. SAP Spartacus 里的三种table类型
  2. 使用Async对Angular异步代码进行单元测试
  3. Angular元素属性绑定的一个例子
  4. 并不是所有SAP产品的UX,都得遵循Fiori UX风格
  5. 在jasmine beforeEach里修改UI元素的一个side effect
  6. Angular input控件的click事件表达式如何被转换成JavaScript函数
  7. SAP ABAP一组关键字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析
  8. SAP Hybris Commerce里类似ABAP里的透明表设计
  9. SAP云平台和SAP C4C之间的OAuth2.0配置
  10. 试图使用removebg工具的在线网站去除图片背景时遇到的错误