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,本程序实现了线性表的链式存储结构.实现的链表带有两个指针,一个始终指向链表中的第一个结点,另一个指针始终指向链表中的最后一个结点. 之所以设置尾指针,是因为,在插入元素到链表中的末尾时,可以通过尾 ...
随机推荐
- docker基础_网络模式
docker网络 网络模式: bridge:docker默认 自己创建会默认使用bridge模式 类似vmware中的NAT模式 其中192.168.1.203是本机在现实世界局域网的ip.172.1 ...
- 元素滚动 scroll 系列
定义 : scroll翻译过来就是滚动的,我们使用scroll系列的相关属性可以动态的得到该元素的大小.滚动距离等. 常用属性 : 需要用到页面滚动事件scroll因为是页面滚动,所以事件源是docu ...
- Persistent Bits - 题解【二进制】
题面: WhatNext Software creates sequence generators that they hope will produce fairly random sequence ...
- 攻防世界-MISC:János-the-Ripper
这是攻防世界MISC高手进阶区的题目: 点击下载附件一,解压后得到一个没有后缀的文件,老规矩用010editor打开,发现存在一个flag.txt文件 用foremost分离一下: flag.txt被 ...
- XCTF练习题---MISC---wireshark1
XCTF练习题---MISC---wireshark1 flag:flag{ffb7567a1d4f4abdffdb54e022f8facd} 解题步骤: 1.观察题目,下载附件 2.得到一个wire ...
- FreeRTOS --(10)任务管理之任务延时
转载自 https://blog.csdn.net/zhoutaopower/article/details/107101723 在<FreeRTOS --(7)任务管理之入门篇>中讲过, ...
- CSS预编译器
零.CSS预编译器 CSS预处理器是指对生成CSS前的某一语法的处理.CSS预处理器用一种专门的编程语言,进行Web页面样式设计,然后再编译成正常的CSS文件,供项目使用 CSS预处理器为CSS增加一 ...
- 关于div及display
1.DIV div被看作是一个盒子,可以设置width.height.这个盒子其实是由三部分构成width(height).padding.border.在默认情况下,所见到的div是border和p ...
- C++进阶-3-5-list容器
C++进阶-3-5-list容器 1 #include<iostream> 2 #include<list> 3 #include<algorithm> 4 usi ...
- linux fedora35 配置jdk,安装mysql,安装tomcat
配置jdk18很简单,下载jdk,只需要.tar.gz结尾的文件就行,https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.t ...