Java链表——插入和删除
目录
一、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
插入操作需要做的:
- new.next = temp
- 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
删除需要做的:
- pre.next = temp.next
- 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链表——插入和删除相关推荐
- Java数据结构与算法-SingleLinkedList单向链表插入,删除,查找,修改详解及代码
SingleLinkedList单向链表插入,删除,查找,修改详解及代码 单向链表学习目标 1. 链表的介绍 2. 单向链表的存储特点以及原理 3. 基本操作:插入,删除等 4. 单向链表应用场景举例 ...
- 数据结构单链表插入和删除操作
单链表:先回顾单链表的特点 逻辑相邻 物理上不一定相连 首先初始化单链表,其中主要保存的是该节点自身的值以及下个节点的地址. 有效节点结构体设计: struct Node{ int data ...
- 双链表插入、删除操作单步解析(十四)
1.双链表定义 单链表只能向后操作,不能向前操作.双链表可以向前和向后操作. 双链表特点:以下图解释 一个前驱指针:ai的前驱指针,指向ai-1结点,即存放ai-1的地址. 数据域:存放数据 一个后驱 ...
- 单链表插入、删除操作单步解析(十三)
1.单链表定义 每个结点包含数据域和指针域,指针域存储下一个结点的地址. 2.插入操作 在第i个结点前面,插入一个e结点. 分析: <1>.s->next = p->next ...
- 单链表插入、删除和查找操作
一.链表的定义: 链表是一种物理存储结构上非连续存储结构. 二.节点的表示: 节点(Node)==>数据+补充信息 三.单链表的插入: 1.头插法 2.尾插法 3.任意位置插入 class No ...
- 双向非循环递增链表——插入,删除,清空
#include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <string.h&g ...
- 数据结构Java实现03----单向链表的插入和删除b
文本主要内容: 链表结构 单链表代码实现 单链表的效率分析 一.链表结构: (物理存储结构上不连续,逻辑上连续:大小不固定) 概念: 链式存储结构是基于指针实现的.我们把一个数据 ...
- 单链表的读取,插入与删除
一:单链表的读取 获得链表第i个数据,算法思路: 1.声明一个指针p指向链表的第一个结点,初始化j从1开始: 2.j<i时,遍历链表,p指针后移,j+1: 3.到链表尾部p为空或者j>i时 ...
- java数据结构20:Big Bang(链表的插入、删除、遍历和查找)
20:Big Bang(链表的插入.删除.遍历和查找) 总时间限制: 20000ms 内存限制: 131072kB 描述 学习累了的时候看看一集二十分钟左右的<生活大爆炸>也不失为一种乐趣 ...
- 对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 ...
最新文章
- 基于SSM实现绿色有机产品直营网
- 用android studio测量距离,Android studio 百度地图开发(6)Marker绑定事件、计算两点距离...
- session 重写进入redis测试
- 关 于 正 则 表 达 式 的 类 习 题
- jbpm小项目测试_尝试使用jBPM Console NG(测试版)
- mysql 终端模拟_mysql客户端模拟脏读、幻读和可重复读
- oracle windows 优化工具,使用Windows工具管理Nt上的Oracle数据库
- Java比较两个实体属性值是否相同,将不同的属性输出
- 将摄像头拍摄图像或者本地图片设置为头像的方法
- Mybatis全局配置文件Configuration.xml详解
- 网站服务器开启cookies,浏览器如何开启cookie(图解浏览器cookie功能使用)
- mina mysql_SpringBoot集成Socket通讯之Mina框架
- Mybatis常见技巧
- Aho-Corasick(AC自动机)
- 一些常用的软件网络端口协议分类介绍
- Android 11 WiFi热点打开与关闭接口
- IEEE1588 Precision Time Protocol(PTP)
- oracle fnd file.log,oracle D_FILE.PUTamp;FND_FILE.PUT_LINE
- Android从当前APP跳转到其他应用
- AI化身心脏病“专家” 为心脏健康保驾护航