目录

一、head头节点

二、插入

1.头插法

2.尾插法

3.按位置插入


首先引入我自定义建立链表对象的类:LinkNode

public class ListNode {private int val;private ListNode next;public ListNode(int value) {this.val = value;}public ListNode() {}public ListNode getNext() {return this.next;}public int getVal() {return this.val;}public void setNext(ListNode next) {this.next = next;}public void setVal(int value) {this.val = value;}
}

一、head头节点

注意,为了实现链表的各种操作,我们定义一个LinkNode 类的对象head。称为头节点,用于指向链表的起点。LinkNode是我自定义的类,用于实现链表对象的建立。

定义head:

ListNode head = null;

二、插入

链表的插入也即链表的构建,把点连成链。因插入位置不同分成三种情况。

1.头插法

在链表最前端插入数据:

public void HeadInsert(int val) {ListNode newNode = new ListNode(val);    首先把val建立成一个新节点if(head == null) {    链表为空的情况head = newNode;return;}newNode.setNext(head);    链表不为空,则把原第一个节点给到新节点的nexthead = newNode;    新节点成为头节点}

2.尾插法

在链表最后插入数据

public void EndInsert(int val) {新建节点存储数据ListNode newNode = new ListNode(val); 判断头节点是否为空,就是链表是否为空if(head == null) {head = newNode;    return;}ListNode indexNode = head;    由于头节点head不能改变,召唤替身while (indexNode.getNext() != null) {    从头向后遍历,直到某一节点的nextindexNode = indexNode.getNext();    是空的,意味他是最后一个节点。}indexNode.setNext(newNode);    让原来最后一个节点的next指向新节点}

3.按位置插入

当在链表中间插入值的时候,新节点:new

原插入位置节点:temp

temp前一个节点:pre

插入操作需要做的:

  1. new.next = temp
  2. pre.next = new
public void Insert(int val,int index) {数值,插入位置if(index<0 || index > this.getLength()) {System.out.println("index位置不合法");return;}if(index == 0) {HeadInsert(val);}else if(index == getLength()) {EndInsert(val);}else {ListNode newNode = new ListNode(val);ListNode tempNode = head;ListNode preNode = null;    pre在temp前1位int position = 0;    通过它找到正确插入位置while (tempNode != null) {if(position == index) {newNode.setNext(tempNode);    pre在temp前1位  temp指向的是要被插入的位置的值preNode.setNext(newNode);return;}preNode = tempNode;tempNode = tempNode.getNext();position++;}}}

三、删除

这里详细介绍的是按位置删除,与按位置插入类似。

欲删除位置节点:temp

temp前一个节点:pre

删除需要做的:

  1. pre.next = temp.next
  2. temp.next = null (temp的值会自动被回收)
public void Delete(int index) {if (index < 0 || index>getLength()) {System.out.println("位置不合法");return;}if(index == 0) {    删除第一个节点时head = head.getNext();return;}ListNode tempNode = head;ListNode preNode = null;int position = 0;while(tempNode != null) {if(position == index) {//pre和temp差1位,temp指向的是要被删除的值preNode.setNext(tempNode.getNext());      //temp的下一个值由pre和temp都指向,删除temp的                                       tempNode.setNext(null );    return;}preNode = tempNode;tempNode = tempNode.getNext();position++;}}

Java链表——插入和删除相关推荐

  1. Java数据结构与算法-SingleLinkedList单向链表插入,删除,查找,修改详解及代码

    SingleLinkedList单向链表插入,删除,查找,修改详解及代码 单向链表学习目标 1. 链表的介绍 2. 单向链表的存储特点以及原理 3. 基本操作:插入,删除等 4. 单向链表应用场景举例 ...

  2. 数据结构单链表插入和删除操作

    单链表:先回顾单链表的特点  逻辑相邻 物理上不一定相连 首先初始化单链表,其中主要保存的是该节点自身的值以及下个节点的地址. 有效节点结构体设计: ​ struct Node{ ​ int data ...

  3. 双链表插入、删除操作单步解析(十四)

    1.双链表定义 单链表只能向后操作,不能向前操作.双链表可以向前和向后操作. 双链表特点:以下图解释 一个前驱指针:ai的前驱指针,指向ai-1结点,即存放ai-1的地址. 数据域:存放数据 一个后驱 ...

  4. 单链表插入、删除操作单步解析(十三)

    1.单链表定义 每个结点包含数据域和指针域,指针域存储下一个结点的地址.  2.插入操作 在第i个结点前面,插入一个e结点. 分析: <1>.s->next = p->next ...

  5. 单链表插入、删除和查找操作

    一.链表的定义: 链表是一种物理存储结构上非连续存储结构. 二.节点的表示: 节点(Node)==>数据+补充信息 三.单链表的插入: 1.头插法 2.尾插法 3.任意位置插入 class No ...

  6. 双向非循环递增链表——插入,删除,清空

    #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <string.h&g ...

  7. 数据结构Java实现03----单向链表的插入和删除b

    文本主要内容: 链表结构 单链表代码实现 单链表的效率分析 一.链表结构: (物理存储结构上不连续,逻辑上连续:大小不固定)            概念: 链式存储结构是基于指针实现的.我们把一个数据 ...

  8. 单链表的读取,插入与删除

    一:单链表的读取 获得链表第i个数据,算法思路: 1.声明一个指针p指向链表的第一个结点,初始化j从1开始: 2.j<i时,遍历链表,p指针后移,j+1: 3.到链表尾部p为空或者j>i时 ...

  9. java数据结构20:Big Bang(链表的插入、删除、遍历和查找)

    20:Big Bang(链表的插入.删除.遍历和查找) 总时间限制: 20000ms 内存限制: 131072kB 描述 学习累了的时候看看一集二十分钟左右的<生活大爆炸>也不失为一种乐趣 ...

  10. 对java 链表删除节点 引用误区理解:对局部变量 cur= cur.next及cur.next=cur.next.next,及cur.next = cur.next.next.next的理解图解

    对java 链表删除节点 引用误区理解: 对java 链表删除节点 引用误区理解: 对局部变量 cur= cur.next及cur.next=cur.next.next,及cur.next = cur ...

最新文章

  1. 基于SSM实现绿色有机产品直营网
  2. 用android studio测量距离,Android studio 百度地图开发(6)Marker绑定事件、计算两点距离...
  3. session 重写进入redis测试
  4. 关 于 正 则 表 达 式 的 类 习 题
  5. jbpm小项目测试_尝试使用jBPM Console NG(测试版)
  6. mysql 终端模拟_mysql客户端模拟脏读、幻读和可重复读
  7. oracle windows 优化工具,使用Windows工具管理Nt上的Oracle数据库
  8. Java比较两个实体属性值是否相同,将不同的属性输出
  9. 将摄像头拍摄图像或者本地图片设置为头像的方法
  10. Mybatis全局配置文件Configuration.xml详解
  11. 网站服务器开启cookies,浏览器如何开启cookie(图解浏览器cookie功能使用)
  12. mina mysql_SpringBoot集成Socket通讯之Mina框架
  13. Mybatis常见技巧
  14. Aho-Corasick(AC自动机)
  15. 一些常用的软件网络端口协议分类介绍
  16. Android 11 WiFi热点打开与关闭接口
  17. IEEE1588 Precision Time Protocol(PTP)
  18. oracle fnd file.log,oracle D_FILE.PUTamp;FND_FILE.PUT_LINE
  19. Android从当前APP跳转到其他应用
  20. AI化身心脏病“专家” 为心脏健康保驾护航

热门文章

  1. 网络服务器ssh、ftp、telnet、samba配置总结
  2. Tomcat:JAVA_HOME should point to a JDK not a JRE解决
  3. 超全面!完全没有设计基础的新手如何做好PPT配色?(附神器)
  4. 深度Linux操作系统使用体验
  5. 虚拟机里CDlinux 里的水滴 minidwep-gtk
  6. java8中lambda的用法(map转list,list转map等等)
  7. matlab汽车牌的识别,matlab车牌号识别
  8. 微信小程序中的倒计时
  9. 光纤中的非线性光学效应
  10. IC基础知识7-数据选择器