java单链表基本操作
/**
*
*/
package cn.com.wwh; /**
* @Description:TODO
* @author:wwh
* @time:2021-1-18 19:24:47
*/
public class SingleLinkedList <T>{ Node list;//头结点
int size;//节点个数 public class Node{
T data;
Node next; public Node(T data,Node next) {
this.data = data;
this.next = next;
}
} /**
*
* @Description:头部增加节点
* @param data
* @return
* @author: wwh
* @time:2021-1-18 19:27:24
*/
public void add(T data) {
Node node = new Node(data, list);
list = node;
size++;
} /**
*
* @Description:指定位置增加结点
* @param data
* @param index
* @return
* @author: wwh
* @time:2021-1-18 19:28:51
*/
public void add(T data,int index) {
checkIndex(index);
if (index == 0) {
add(data);
return;
}else {
Node preNode = list;
Node curNode = list;
for (int i = 0; i < index; i++) {
preNode = curNode;
curNode = curNode.next;
}
Node node = new Node(data, curNode);
preNode.next = node;
size++;
}
} /**
*
* @Description:删除头部结点
* @return
* @author: wwh
* @time:2021-1-18 19:33:51
*/
public T remove() {
if (list != null) {
Node headNode = list;
list = list.next;
headNode.next = null;//GC
size--;
return headNode.data;
}
return null;
} /**
*
* @Description:删除指定位置的结点
* @param index
* @return
* @return
* @author: wwh
* @time:2021-1-18 19:35:49
*/
public T remove(int index) {
checkIndex(index);
if (list != null) {
if (index == 0) {
return remove();
}
Node preNode = list;
Node curNode = list;
for (int i = 0; i < index; i++) {
preNode = curNode;
curNode = curNode.next;
}
preNode.next = curNode.next;
curNode.next = null;
size--;
return curNode.data;
}
return null;
} /**
*
* @Description:删除最后一个结点
* @return
* @return
* @author: wwh
* @time:2021-1-18 19:38:42
*/
public T removeLast() {
if (list != null) {
Node preNode = list;
Node curNode = list;
while (curNode.next != null) {
preNode = curNode;
curNode = curNode.next;
}
preNode.next = null;
size--;
return curNode.data;
}
return null;
} /**
*
* @Description:修改指定位置的值
* @param index
* @param data
* @return
* @author: wwh
* @time:2021-1-18 19:41:23
*/
public void set(int index,T data) {
checkIndex(index);
Node curNode = list;
for (int i = 0; i < index; i++) {
curNode = curNode.next;
}
curNode.data = data;
} /**
*
* @Description:获取头结点
* @return
* @return
* @author: wwh
* @time:2021-1-18 19:42:48
*/
public T get() {
if (list != null) {
return list.data;
}
return null;
} /**
*
* @Description:获取指定位置的结点
* @param index
* @return
* @return
* @author: wwh
* @time:2021-1-18 19:44:06
*/
public T get(int index) {
checkIndex(index);
if (list != null) {
Node curNode = list;
for (int i = 0; i < index; i++) {
curNode = curNode.next;
}
return curNode.data;
}
return null;
} /**
*
* @Description:下标检查
* @param index
* @return
* @author: wwh
* @time:2021-1-18 19:29:24
*/
public void checkIndex(int index) {
if (!(index >= 0 && index <= size)) {
throw new IndexOutOfBoundsException(index +": out of " + size );
}
} @Override
public String toString() {
Node node = list;
for (int i = 0; i < size; i++) {
System.err.print(node.data + " ");
node = node.next;
}
System.err.println();
return super.toString();
} public static void main(String[] args) {
SingleLinkedList list1 = new SingleLinkedList();
for (int i = 0; i < 5; i++) {
list1.add(i);
}
list1.toString();
list1.add(3);
list1.toString();
list1.add(34, 6);
list1.toString();
list1.remove();
list1.toString();
list1.removeLast();
list1.toString();
list1.remove(0);
list1.toString();
list1.set(0, 88);
list1.toString();
System.err.println(list1.get());
System.err.println(list1.get(3));
}
}
java单链表基本操作的更多相关文章
- Java单链表实现
/** * * 单链表基本操作 * * @author John * */ class LinkList { private Node first; private int pos = 0; publ ...
- c++学习笔记—单链表基本操作的实现
用c++语言实现的单链表基本操作,包括单链表的创建(包括头插法和尾插法建表).结点的查找.删除.排序.打印输出.逆置.链表销毁等基本操作. IDE:vs2013 具体实现代码如下: #include ...
- Java单链表反转 详细过程
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/guyuealian/article/details/51119499 Java单链表反转 Java实 ...
- java 单链表 练习
练习一下java单链表的简单习题 package com.test1; import java.util.Stack; public class SingleListDemo { /** * 返回单链 ...
- Java单链表反转图文详解
Java单链表反转图文详解 最近在回顾链表反转问题中,突然有一些新的发现和收获,特此整理一下,与大家分享 背景回顾 单链表的存储结构如图: 数据域存放数据元素,指针域存放后继结点地址 我们以一条 N1 ...
- C++ 单链表基本操作
链表一直是面试的高频题,今天先总结一下单链表的使用,下节再总结双向链表的.本文主要有单链表的创建.插入.删除节点等. 1.概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数 ...
- java单链表代码实现
用惯了C++,java写起来果然不太爽...不废话了,上代码... package javaInnerclassDemo; class Link{ class Node{ private String ...
- java单链表常用操作
总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K ...
- JAVA单链表的实现-不带头结点但带有尾指针
1,本程序实现了线性表的链式存储结构.实现的链表带有两个指针,一个始终指向链表中的第一个结点,另一个指针始终指向链表中的最后一个结点. 之所以设置尾指针,是因为,在插入元素到链表中的末尾时,可以通过尾 ...
随机推荐
- Spring从入门到源码(一)
Spring 1.什么是框架? 人话就是:方便干活,架子有了,直接拿来用就完事了. spring,springmvc,mybatis三大开框架 2.架构的演变过程 单一应用架构 垂直应用架构 分布式服 ...
- Hadoop3.x 三大组件详解
Hadoop Hadoop适合海量数据分布式存储和分布式计算 运行用户使用简单的编程模型实现跨机器集群对海量数据进行分布式计算处理 1. 概述 1.1 简介 Hadoop核心组件 HDFS (分布式文 ...
- 服务器安全加固 - Linux
一.账号和口令 1.1 禁用或删除无用账号 查看 /etc/passwd 文件查看是否有无用的账号,如果存在则删除,降低安全风险. 操作步骤: 使用命令 userdel <用户名> 删除不 ...
- 使用fastai训练的一个性别识别模型
在学习了python中的一些机器学习的相关模块后,再一次开始了深度学习之旅.不过与上次的TensorFlow框架不同,这一次接触的是fast.ai这样一个东西.这个框架还不稳定,网上也没有相关的中文文 ...
- Jackson通用工具类
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.11.1' compile group: ...
- while..else ;for;range; 基本数据类型的内置函数
while + esle #当while循环正常循环结束后,会执行else中的代码块.如果遇到break结束循环,else中的代码将不会运行. ``` 结构: while 条件: 循环代码 else: ...
- django基础--02基于数据库的小项目
摘要:简单修改.增加部分页面,了解django开发的过程.(Python 3.9.12,django 4.0.4 ) 接前篇,通过命令: django-admin startproject myWeb ...
- Java 16 新特性:record类
以前我们定义类都是用class关键词,但从Java 16开始,我们将多一个关键词record,它也可以用来定义类.record关键词的引入,主要是为了提供一种更为简洁.紧凑的final类的定义方式. ...
- kvm 虚拟化技术 1.3之kvm克隆以及快照
1.kvm虚拟机克隆 克隆kvm虚拟机 ,克隆前需要提前关机 语法: virt-clone -o 原虚拟机 -n 新虚拟机 -f 新虚拟机镜像存放路径 选项中-o 表示 old ...
- mybatis plus 更新字段的时候设置为 null 后不生效
mybatis plus 将属性设置为 null 值会被忽略,最终生成的 sql 中不会有 set field = null(可能是某些情况) mybatis-plus 更新字段的时候设置为 null ...